1

我想使用 PEG.js 来识别几种不同格式的数字:

number = integer
/ real
/ (integer/real) '^' (integer/real)
/ (integer/real) '^^' (integer/real)

real = [0-9]+ '.' [0-9]*
/ [0-9]* '.' [0-9]+

integer = [0-9]+

如果在替代序列中较早存在部分匹配,则 PEG.js 不会寻找替代。大多数数字以整数开头,如果不是,则以实数开头。我该如何重写它以便单独测试每个替代方案?(我对将规则组合成更少的规则不感兴趣。)

4

1 回答 1

2

首先尝试匹配更具体的表达式(因为规则之间存在重叠,所以您希望 PEG 首先更具体地匹配以防止部分匹配):

number = ( real / integer ) '^' ( real / integer )
/  ( real / integer ) '^^' ( real / integer )
/ real
/ integer
于 2016-07-22T17:42:10.833 回答