私は本質的にPEG for Python style indentationと同じ質問をしていますが、私はもう少し方向性を考えています。this answer。PEG.jsで字下げレベルを解析します
答えは、入力の各行であり、行間に 'INDENT'と 'DEDENT'がある文字列の配列を正常に生成します。彼がトークン化するためにPEG.jsを使用したようですが、実際の解析は行われていません。
実際の解析を行うために彼の例をどのように拡張できますか?一例として、
、どのように私はこの文法を変更することができます。
start = obj
obj = id:id children:(indent obj* outdent)?
{
var o = {};
o[id] = children[1];
return (children[1] ? o : id);
}
id = [a-z]
indent = '{'
outdent = '}'
ブロックを描写するためにインデントの代わりに中括弧を使用し、まだ同じ出力を得るには?
(以下の入力と、その文法をテストするためにhttp://pegjs.majda.cz/onlineを使用:a{bcd{zyx{}}}
)
私は本当にこのanwserに感謝します。あなたはどうやってこの方法を考え出すのですか? – jiyinyiyong
これをhttp://pegjs.majda.cz/onlineに直接コピー/ペーストするとコンパイルされません。いくつかの微調整の後で、それを "修正"する方法が明確ではない。 – Clearly
ちょうどこれをテストした場合、スニペットはコンパイルし、期待される出力をうまく生成します。どのようなエラーが発生したのかはわかりません。 – chakrit