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 に答える