peg.jsにて区切り文字とした'<' ,'>'をParserの状況によって意味を変えられるようにしたい
peg.jsにおいて
以下のようなparserを書きました
perser.pegjs
Start
= c:(Content+) EOL {
return c;
}
Content
= openId:OpenTag c:(Content)+ closeId:CloseTag {
if (openId !== closeId) {
throw new Error( "expect </ " + openId+ "> but </" + closeId + ">");
}
return { type:'element', id:openId, content:c};
}
/txt:ContentText {
return {type:'txt', content:txt.trim()}
}
ContentText = [^<>\n]+ { return text();}
OpenTag = "<" id:[0-9]+ ">" { return parseInt(id.join(''))}
CloseTag = "</" id:[0-9]+ ">" { return parseInt(id.join(''))}
EOL = [\n]*
以下の入力を受け取りjsonを吐きます
<1>abc</1><2>def<3>ghi</3></2>
出力
[
{
"type": "element",
"id": 1,
"content": [
{
"type": "txt",
"content": "abc"
}
]
},
{
"type": "element",
"id": 2,
"content": [
{
"type": "txt",
"content": "def"
},
{
"type": "element",
"id": 3,
"content": [
{
"type": "txt",
"content": "ghi"
}
]
}
]
}
]
このparserではContentText に <,> を含めることが出来ませんが
なんとか含ませたい場合どの様にparserをかけばよろしいでしょうか?