我正在编写一个包含以下三个解析表达式的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).
使用此表达式,我的意思是如果存在int
或frac
(在非排他性含义中),则exp
会出现在第一个替代项中。确实有缩短定义的合法方式吗?这样的事情会违反PEG的原则吗?
答案 0 :(得分:2)
您可以根据其他字词定义number
,例如decimal
:
decimal => int frac | int | frac
number => decimal exp | decimal