2016-07-22 8 views
1

内のすべての代替のパターン私は、いくつかの異なる形式で番号を認識するためにPEG.jsを使用する:部分一致以前であった場合テスト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は選択肢を探していません代替のシーケンス。ほとんどの数字は整数で始まり、そうでなければ実数で始まります。これを書き換えて個々の代替案を個別にテストできるようにするにはどうすればよいですか? (私は少数のルールにルールを配合することに興味はないです。)

答えて

2

は最初のより具体的な表現にマッチしてください(ルール間の重複がありますので、あなたはPEGは、部分一致を避けるために、より具体的に一致させたいので):

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

申し訳ありませんが、私は問題を十分に私の例で捕捉していないので、私はそれを更新しなければなりませんでした。このアプローチは拡張された例でも使えますか? –

+0

@Pickett私の編集を参照してください。 – robertklep

+0

ありがとうございます。この場合、整数または実数が最初のルールの部分一致になると思っていましたが、パターンが入力と部分的に一致する場合にのみ部分的に一致するようになりました。 +1 –

関連する問題