Ich bin der Umsetzung Python Grammatik in AnTLR4 aber ich bin vor dem gleichen Problem mit SPIEGELSTRICH und Dedent diskutiert hier: ANTLR4- dynamically inject tokenAnTLR4: SPIEGELSTRICH und Dedent Token
Die Lösung, die ich versucht bin, ist die Lösung von Ter zu konvertieren, das sein kann hier gefunden http://antlr3.org/grammar/1078018002577/python.tar.gz (override nextToken und imaginäre Token einfügen).
Das Problem ist, dass diese Lösung geht davon aus, dass wir eine Lexer Regel haben wie:
LEADING_WS
: {getColumn()==1}?
// match spaces or tabs, tracking indentation count
( ' ' { spaces++; }
| '\t' { spaces += 8; spaces -= (spaces % 8); }
| '\014' // formfeed is ok
)+
{
}
...
aber ich halte einen Fehler bekommen, weil Aktionen in Lexer Regel letztes Element auf einzelne altermost Alternative sein muss.
kann mir jemand helfen, eine lösung zu finden?
Vielen Dank !!!
Sorry für die schamlose Werbung, aber ich hatte das gleiche Problem und beschlossen, eine Hilfsklasse für sie zu schreiben: [antlr-DGeben] (https://github.com/yshavit/antlr-denter). – yshavit