非独占或运算符,用于为解析表达式语法(PEG)生成新的解析表达式

时间:2014-08-20 10:58:42

标签: python regex parsing grammar

我正在编写一个包含以下三个解析表达式的PEG:

int     => ^[-+]?[1-9]\d*
frac    => ^[-+]?[.][0]?[1-9]\d*
exp     => ^[E][1-9]\d*

exp代表" E表示法")。这三个表达式用于组成数字。目前我正在为number编写解析表达式:

number  => int frac exp | int frac | int exp | frac exp | int | frac

我不喜欢这个美学定义因为我发现它重复。我想缩短它。我想象以下符号:

number   => (int or frac) exp | (int or frac).

使用此表达式,我的意思是如果存在intfrac(在非排他性含义中),则exp会出现在第一个替代项中。确实有缩短定义的合法方式吗?这样的事情会违反PEG的原则吗?

1 个答案:

答案 0 :(得分:2)

您可以根据其他字词定义number,例如decimal

decimal   => int frac | int | frac
number    => decimal exp | decimal