【发布时间】:2017-06-23 21:50:36
【问题描述】:
我正在尝试学习 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" },
]
}
换句话说:
- 第一行是它自己的一个段落,因为它后面是一个空行
- 第三和第四行是一个段落,因为它们后面跟着一个空行
- 第六行是一个段落,因为它是最后一行(一个或多个)
我可以编写一个匹配行和空行的语法(请参阅http://peg.arcanis.fr/4f4NdP/),但是我所做的任何尝试将多个连续行后跟一个空行(或 EOF)变成一个段落的操作都会导致递归错误.我觉得这是一个非常简单的 n00b 东西,我只是想念它,因为我以前没有使用过 PEG。
我知道我可以在初始化程序块中编写一个全局函数并跟踪最后一个元素并使其具有上下文关系,但我觉得这并没有真正使用我应该使用的语法。
【问题讨论】:
标签: javascript pegjs