2016-12-03 4 views
1

Ich benutze die Bychan-Bibliothek und diese Frage umgibt es hauptsächlich.Gibt es eine Möglichkeit zu überprüfen, ob das nächste Token END ist?

Ich habe gerade das minilang Beispiel ausgecheckt und den Code gelesen. Als ich die StatementNode sah, hatte ich Mühe, einen Weg zu finden, um ein Endsemblem für konventionelle Zwecke hinzuzufügen. In diesem Beispiel wird ; verwendet, um Anweisungen zu trennen, aber es gibt keine Möglichkeit, ein Skript mit der letzten Anweisung zu beenden, die mit ; endet, da der Parser das Ende nicht parsen kann und dazu führen würde:

'Premature end reached' @ position ..., current lexeme is END ... 

Gibt es eine Möglichkeit zu überprüfen, ob der nächste Token der END ist oder ist das, was ich denke falsch und Blick nach vorne ist nicht das Richtige zu tun, und dass es andere Möglichkeiten gibt?

tat ich versuche parser.nextIs(EndToken.get()) vor, aber die IDE sagt einfach no instance(s) of type variable(s) N exist so that EndToken<N> conforms to TokenKey

ich nicht, dass Fortschritt in Java sein kann, eine Lösung zu verstehen. :(

aus: https://github.com/atorstling/bychan/issues/37

Antwort

0

Dies war eine Unterlassung Der Kern Parser PrattParser hat eine peek() Funktion das nächste Token zu bekommen und man kann es in jedem Token-Typ vergleichen Sie würden verwenden, die als peek().getToken().equals(EndToken.get())

...

die Parser-Schnittstelle für das dynamische Paket hat UserParserCallback, eine weitere Schnittstelle für die gleiche Sache. nextIs(TokenKey) die Idee einer typsichere Gleichheitsprüfung zu schaffen, war als javas equals gebautet die Gleichheit Typ TokenKey hieß

..

Nun ist das Problem aufgetreten, dass die statischen Tokens, wie z. B. , keine TokenKey s enthielten. Die Fehlerbehebung für Problem 37 hat das behoben.

So können Sie jetzt anrufen parser.nextIs(EndToken.get().getKey()). Ein Beispiel finden Sie unter ReadmeExamples::statements.

`

Verwandte Themen