antlr 3 двусмысленность - PullRequest
1 голос
/ 15 мая 2010

Я пытаюсь написать несколько простых правил, и я получаю эту неоднозначность

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. Я понимаю неоднозначность, но я не понимаю, почему упреждающее решение не решает эту проблему.1006 *

  2. У меня есть простое решение, но оно мне не нравится:

    rule: (nsf1 (nsf2 | what2)) |(what1 (nsf2 | what2));

У кого-нибудь есть более элегантное решение?

Большое спасибо, Крис

1 Ответ

0 голосов
/ 15 мая 2010

Я не мог воспроизвести вашу проблему, но все, что я мог сделать, это угадать, каковы были правила для «what1» и «what2». Можете ли вы опубликовать более полную грамматику?

Однако в грамматике нет ничего, что нельзя было бы сделать полностью с помощью лексер-токена, а не правил парсера. Попробуйте использовать заглавные буквы всех имен правил, чтобы превратить их в лексерный токен, и посмотрите, поможет ли это.

...