1

いくつかの簡単なルールを書こうとすると、このあいまいさが生じます

rule: field1 field2; //ambiguity between nsf1 and nsf2 even if I use lookahead k=4

field1: nsf1 | whatever1...;
field2: nsf2 | whatever2...;

nsf1: 'N' 'S' 'F' '1'; //meaning: no such field 1
nsf2: 'N' 'S' 'F' '2'; //meaning: no such field 2
  1. あいまいさは理解できますが、先読みがこれを解決しない理由がわかりません。

  2. 私は簡単な解決策を持っていますが、それは好きではありません:

    ルール:(nsf1(nsf2 |whatever2))| (whatever1(nsf2 | what2));

誰かがもっとエレガントな解決策を持っていますか?

どうもありがとう、クリス

4

1 に答える 1

0

問題を再現することはできませんでしたが、「whatever1」と「whatever2」のルールを推測することしかできませんでした。より完全な文法を投稿できますか?

ただし、文法には、パーサールールではなくレクサートークンで完全に実行できないものはありません。すべてのルール名を大文字にして、それらをレクサートークンに変換し、それが役立つかどうかを確認してください。

于 2010-05-15T18:19:46.217 に答える