有没有办法检查下一个令牌是否为END?

时间:2016-12-03 15:59:40

标签: java bychan

我使用的是bychan库,这个问题主要围绕着它。

我刚刚查看了minilang示例并阅读了代码。当我看到StatementNode时,我正在努力寻找一种方法来为常规目的添加结尾分号。在该示例中,;用于分隔语句,但是没有结束脚本的方式,最后一个语句以;结尾,因为解析器不能解析结束并导致:

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

有没有办法检查下一个令牌是END还是我认为不正确的事情,展望未来是不是正确的事情,还有其他方法吗?

我之前尝试过parser.nextIs(EndToken.get()),但IDE只是说no instance(s) of type variable(s) N exist so that EndToken<N> conforms to TokenKey

我可能不会在Java中取得进展以找出解决方案。 :(

来自:https://github.com/atorstling/bychan/issues/37

1 个答案:

答案 0 :(得分:0)

这是一个遗漏。核心解析器PrattParser具有peek()函数以获取下一个令牌,您可以将其与任何令牌类型进行比较。您可以将其用作peek().getToken().equals(EndToken.get())

动态包的解析器接口UserParserCallback具有另一个用于同一事物的接口:nextIs(TokenKey)。我们的想法是创建一个比javas builtin equals更多的类型安全的平等检查。相等类型称为TokenKey

现在您遇到了静态令牌(例如EndToken)没有任何TokenKey的问题。问题37的修复解决了这个问题。

现在你可以致电parser.nextIs(EndToken.get().getKey())。有关示例,请参阅ReadmeExamples::statements

`