Parsing PEG解析器:是;“可选”;及;一个或多个“;有必要制定规则吗?
维基百科关于PEG解析器的文章定义了以下组合词:Parsing PEG解析器:是;“可选”;及;一个或多个“;有必要制定规则吗?,parsing,parser-combinators,peg,Parsing,Parser Combinators,Peg,维基百科关于PEG解析器的文章定义了以下组合词: 2.Given any existing parsing expressions e, e1, and e2, a new parsing expression can be constructed using the following operators: Sequence: e1 e2 Ordered choice: e1 / e2 Zero-or-more: e* One-or-more: e+ Optional: e? And-p
2.Given any existing parsing expressions e, e1, and e2,
a new parsing expression can be constructed using the following operators:
Sequence: e1 e2
Ordered choice: e1 / e2
Zero-or-more: e*
One-or-more: e+
Optional: e?
And-predicate: &e
Not-predicate: !e
所有这些组合子真的有必要吗?在我看来,可选和一个或多个可以很容易地实现为
e+ = e* & e
e? = e / ""
我说的对吗,还是有什么基本的东西要求这两种形式是独立的原子?我正在构建我自己的PEG解析器,跳过这两个(或者用其他组合词定义它们)会很方便,但我想确保我没有遗漏任何重要的东西。你是正确的,除了
e+
是作为一个序列编写的,没有&
e+ := e e*
您是正确的,只是
e+
是作为一个序列编写的,没有&
e+ := e e*
[扩展您和280Z28所说的内容…]
可以按照顺序和+
以及可能的*
进行定义(尽管后者的扩展不常用):&
可根据选择进行定义:?
x? == x / (empty)
可以用&
来定义代码>:
&x = !!x
可以按照顺序和+
以及可能的*
进行定义(尽管后者的扩展不常用):&
可根据选择进行定义:?
x? == x / (empty)
可以用&
来定义代码>:
&x = !!x
e+
也可以写成&e*
(注意:顺序与问题相反)。e+
也可以写成&e*
(注意:顺序与问题相反)。