2017-12-02 2 views
0

Ich habe eine Regel-Parser wie folgt definiert: ‚‘antlr4: Tokenerkennungsfehler "." Punkt und andere Satz

text: '"'.*?'"' ; 

jedoch diese Failes, wenn der Text enthält Interpunktion.

",;:!?./§/*-+)({}[]abc" 
line 1:1 token recognition error at: ',' 
line 1:2 token recognition error at: ';' 
line 1:4 token recognition error at: '!' 
line 1:5 token recognition error at: '?' 
line 1:6 token recognition error at: '.' 
line 1:7 token recognition error at: '/' 
line 1:8 token recognition error at: '§' 
line 1:9 token recognition error at: '/' 
line 1:10 token recognition error at: '*' 
line 1:11 token recognition error at: '-' 
line 1:12 token recognition error at: '+' 
line 1:13 token recognition error at: ')' 
line 1:14 token recognition error at: '(' 

Seltsamerweise werden Curlies erkannt. Irgendwelche Hilfe zu akzeptieren irgendetwas als Teil einer Zeichenfolge?

+0

Wahrscheinlich ein Problem, bei dem eine andere Regel in der Grammatik unabsichtlich versucht, die Zeichenfolge zu konsumieren. Die Curlies sind ein Hinweis. Versuchen Sie, den Token-Stream zu entladen. – GRosenberg

Antwort

1

Sie text benötigen als Lexer Regel wie folgt definiert werden:

TEXT: '"'.*?'"' ; 

das Wildcard-Operator in einer Parser-Regel ANTLR passt auf jede Regel statt einem beliebigen Zeichen Bei Verwendung.

+0

In der Tat .. gut gemacht Herr – dgan

+0

Sollte ich immer eine Lexer-Regel für jede Parser-Regel definieren? – dgan

+0

Nein ... Lexer-Regeln sind da, um die Eingabezeichen zu token und Parser-Regeln sind dazu da, diese Token auf eine bestimmte Art zu gruppieren – Raven