私は peg.js を学習しようとしており、テキストの単純な「ブロック」を解析したいと考えていますが、構文から「無限ループの可能性」エラーが発生することなく連続行をグループ化する方法に苦労しています。
ゴール:
line 1
line 3
line 4
line 6
解析されると、次のようになります。
{
"type": "root",
"children": [
{ type: "para", content: "line 1" },
{ type: "para", content: "line 3\nline 4" },
{ type: "para", content: "line 6" },
]
}
言い換えると:
- 1 行目は空白行が続くため、それ自体が段落です。
- 3 行目と 4 行目は、その後に空白行があるため、段落です。
- 6 行目は最後の行 (1 つまたは複数) であるため、段落です。
行と空白行に一致する文法を書くことはできます ( http://peg.arcanis.fr/4f4NdP/を参照)。段落は再帰エラーで終わります。これは、以前に PEG を使用したことがないため、見逃している非常に単純な n00b のような気がします。
イニシャライザ ブロックにグローバル関数を記述して、最後の要素を追跡し、コンテキストに応じたものにすることができることはわかっていますが、それは本来あるべき文法を実際に使用していないように感じます。