folgende ANTLR v3 Grammatik Gegeben:Wrong AST Auswahl
tokens
{
OPTION;
UNKNOWN;
}
statement : my_statement
| UNKNOWN_KEYWORD -> ^(UNKNOWN)
;
my_statement : FIRST SECOND type = THIRD? -> ^(OPTION $type?);
FIRST : 'my';
SECOND : 'keyword';
THIRD: 'best';
UNKNOWN_KEYWORD : .;
Warum das ist, wenn die Zeichenfolge „mein Stichwort this_is_garbage“ analysiert wird, wird abgeholt von my_statement während es picked- hätte sein sollen up von UNKNOWN_KEYWORD (dh der AST, die zurückgegeben wird, ist ^(OPTION $ type?) während es ^(UNKNOWN) hätte sein sollen)?
FIRST 'my'
SECOND 'keyword'
UNKNOWN_KEYWORD 't'
UNKNOWN_KEYWORD 'h'
...
UNKNOWN_KEYWORD 'e'
das heißt, ein FIRST
Token ein Token SECOND
und dann 15 UNKNOWN_KEYWORD
Tokens:
"THIRD" ist in Ihrer Parser-Regel optional, daher passte die Regel "mein Schlüsselwort" gut und ging nicht einmal zu "this_is_garbage". –
Ja, es passt nicht zu my_keyword, aber es liefert nicht den AST^(UNKNOWN), was man erwarten würde. Wie kann die Grammatik korrigiert werden, so dass sie diesen AST zurückgibt? – user5793565
Das Verhalten, das Sie sehen, ist genau das, was ich von dieser Grammatik erwarten würde :) Nun, vorausgesetzt, dass 'UNKNOWN_KEYWORD' irgendwo definiert ist (' UNKNOWN' ist ein einzelnes Zeichen). 'my_statement' stimmt überein, so dass der zweite Zweig von' statement' nicht einmal ausprobiert wird. –