ANTLR 4.5 gibt mir eine "nicht übereinstimmende Eingabe 'String []' erwartete 'String'", aber ich verstehe nicht, warum die '[]' enthalten sind das Token.ANTLR4 geben nicht übereinstimmende Eingabe wegen Klammern in einem Token enthalten
Ich habe die Grammatik nach unten auf das Nötigste gestrippt, um das Problem zu zeigen:
grammar Test;
@header
{
package parser;
}
mainClass : 'class' ID '{' 'void' 'main' '(' 'String' '[' ']' ID ')' '}' ;
ID : [a-zA-Z] [a-zA-z0-9]* ;
WS : [ \t\f\r\n]+ -> channel(HIDDEN);
Der Eingang ist:
class A
{
void main(String[] args)
}
Wenn ich ‚String []‘ dann die Eingabe erfolgreich analysiert.
Wenn ich die Token aus dem Syntaxbaum ausdrucke, sehen sie alle wie erwartet aus, außer dass 'String []' als ein ID-Token und nicht als 3 separate Tokens angezeigt wird.
Ich habe versucht, die 'String', '[' und ']' Token explizit zu definieren, aber das Ergebnis ist das gleiche.
Ich kann einfach nicht herausfinden, was falsch ist.
Nur was mir in den Sinn kommt, ist, dass deine Lexer-Regeln sich gegenseitig bekämpfen. Versuchen Sie, sie in benannte Regeln zu konvertieren, nicht nur in Literalregeln, und versuchen Sie, mit der Reihenfolge der Regeln zu spielen. – Divisadero