gpt4 book ai didi

JavaCC:标记定义中的多个相等字符

转载 作者:行者123 更新时间:2023-12-01 12:50:40 27 4
gpt4 key购买 nike

在 JavaCC 中,如何定义由重复字符组成的标记,如下例所示:

"..."
what would correspond to

TOKEN : { TripleDot : "..." }

"::" what would correspond to

TOKEN : { DoubleColon : "::" }

"//" what would correspond to

TOKEN : { DoubleSlash : "//" }

等等

JavaCC 编译器允许我在没有警告消息的情况下定义这些标记,但是一旦我在另一个词法标记规则中使用这些标记(其中此定义是一种替代方案),我就会收到警告。见下文:

考虑到我写作时的上述规则

TOKEN : { TestToken : <DoubleColon> }

我没有收到任何警告。但是当我写的时候

TOKEN : { TestToken : "test" | <DoubleColon> }

JavaCC 编译器告诉我以下内容:

Waning: Line 84: Column 9: Regular Expression Choice: TestToken can never be matched as: DoubleColon.

但是这是为什么呢?我知道词法分析器可能很难识别重复字符,但我应该能够定义一个 LOOKAHEAD,即使在我不能的标记定义中也是如此。

我错过了什么?

附录:

我尝试过这个:

TOKEN : { DoubleSlash : "/"{2} }

没有任何成功。具有相同的效果。

最佳答案

我确实找到了一个比预期更简单的解决方案:

为了定义由多个相同字符组成的标记,可能只需要定义该特定字符的一个实例

例如

TOKEN : { < Slash : "/" > }

然后执行以下操作:

TOKEN : { < TrippleSlash : <Slash><Slash><Slash> > }

我已经对其进行了编码和测试,它似乎工作正常。

关于JavaCC:标记定义中的多个相等字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24234068/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com