In früheren Versionen von Jison war es möglich, eine Flex-ähnliche Funktion zu haben, mit der Variablen definiert werden konnten, auf die sowohl im Lexer- als auch im Parser-Kontext zugegriffen werden kann, wie zum Beispiel:
%Vor%Referenz: Flex-ähnliche Funktionen?
Obwohl dies in der neuesten Version von Jison nicht der Fall ist. chars
, words
und lines
können nicht vom Parserkontext aus erreicht werden, wodurch ein Fehler generiert wird.
Wenn ich mehr über die neue Version suche, habe ich herausgefunden, dass es möglich sein sollte, die Ausgabe im Parser-Kontext innerhalb von %{ ... %}
zu definieren, aber es funktioniert nicht, obwohl es für mehrzeilige Anweisungen verwendet wird. Ich erzeuge Code von einer Quelle zu einer Zielsprache, und ich werde diesen Code verschönern, indem ich die korrekte Einrückung anwende, die vom Scope gesteuert wird und direkt aus dem Parser generiert, ohne einen AST zu erstellen.
Wie funktionieren globale Definitionen derzeit in Jison?
Die aktuelle Version von Jison hat eine Variable namens yy
, deren Zweck es ist, die Datenaustausch zwischen lexikalischen Aktionen, semantischen Aktionen und anderen Modulen. Ihr Codebeispiel kann funktionieren, wenn Sie alle diese Variablen in yy
wie folgt speichern:
Der obige Code wurde unter Verwendung von Jison 0.4.13 auf Jisons Testseite getestet.
Tags und Links flex-lexer compiler-construction jison