ANTLR rekurencyjne Problem niejednoznaczności

głosy
0
VARIABLE: ...

UNARYOP: 'not' Expression; // unary operation
BINARYOP: 'or' VARIABLE;

Expression : (NIL | INTEGER | UNARYOP) BINARYOP?;

W powyższym scenariuszu „lub” może albo zostać osiągnięty poprzez

Expression-> BINARYOP

lub

EXPRESSION-> UNARYOP-> Expression-> BINARYOP

Czy istnieje sposób systematyczny w celu usunięcia niejasności takich jak powyżej?

Utwórz 20/09/2009 o 21:29
źródło użytkownik
W innych językach...                            


1 odpowiedzi

głosy
1

Myślę, że usunięcie niejasności w gramatyk jest non zadanie automatycznie rozwiązywalne bo jeśli wybrać, który z wariantów jest właściwa to „subiektywne” wyborem.

Po zidentyfikowaniu problemu, budować różne alternatywne drzew i dodawać nowe zasady produkcji, aby uniemożliwić nieprawidłowe drzewo wyprowadzenia.

Obawiam się, nie ma magiczne rozwiązanie podobne do usuwania lewej rekursji ... Może się mylę.

W twoim przypadku można zdefiniować

Expression : NIL
           | INTEGER
           | VARIABLE
           | 'not' Expression
           | Expression 'or' Expression;

Czy chcesz ograniczyć prawą stronę „lub” tylko do zmiennych?

Odpowiedział 20/09/2009 o 22:49
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more