2016-12-03 113 views
1

我使用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

回答

0

这是一个遗漏的核心解析器PrattParserpeek()函数来获取下一个标记,你可以把它比作任何记号类型你会使用它作为peek().getToken().equals(EndToken.get())

解析器接口,为动态包,UserParserCallback,具有同样的事情另一个接口:nextIs(TokenKey)当时的想法是不是Java类内置equals创造更加平等的类型安全检查的平等类型被称为TokenKey

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

所以现在你可以拨打parser.nextIs(EndToken.get().getKey())。有关示例,请参见ReadmeExamples::statements

`

相关问题