提问人:Eto 提问时间:9/23/2023 最后编辑:Jim GarrisonEto 更新时间:9/23/2023 访问量:33
JAVA CC 模式在预期的令牌上抛出错误
JAVA CC Pattern Throws an Error on an Expected Token
问:
我在 JAVACC 中定义了以下模式:
| < CONFIGURATION_PATTERN: "(" ("\n")* (" ")* ((<LETTER>)+ " = " (<LETTER> | <DIGIT>)+ ("\n") (" ")*)+ (" ") ")" >
| < CONFIGURATION_SUB_PATTERN: "(" ("\n")* (" ")* ((<LETTER>)+ " = " (<LETTER> | <DIGIT> | <BOOLEAN>)+ ("\n") (" ")*)+ (" ") ")" >
然后,我有一个按预期解析的文件,但是当它到达以下行时,它会向我抛出一个错误:
*线条
CONFIGURATION (
INSERTVALUE = 200
PROPERTIES (
MOVETABLE = false,
DOWRITE = true
)
)
抛出错误:
Parse error: Encountered " "(" "( "" at line 25, column 29.
Was expecting one of:
"SOMETOKEN" ...
"SOMETOKEN2" ...
"SOMETOKEN3" ...
<SOME_PATTERN> ...
<SOME_PATTERN2> ...
我还有另一个文件,其中 PROPERTIES 部分不是文件的一部分,并且应用了 CONFIGURATION_PATTERN 和 CONFIGURATION_SUB_PATTERN,没有错误。
我试图调试这个,但我没有落后于错误,因为我不明白为什么它抱怨 CONFIGURATION 后面的第一个“(”。
我尝试删除 CONFIGURATION 部分,然后按预期解析整个文件。我试图显式设置“(”和“)”,但随后它抱怨它期望正确的模式。
我 chatgped 了这个问题,ChatGPT 告诉我应用一个递归模式,我尝试用 ,所以我把 .CONFIGURATION_SUB_PATTERN
(<CONFIGURATION_PATTERN> | <CONFIGURATION_SUB_PATTERN>)*
之前,我尝试设置如下所示的模式,这对我来说看起来很丑陋,但应该是正确的:
"(" ("\n")* (" ")* ((<LETTER>)+ ("(" | " = ") ((<LETTER> | <DIGIT>)+ | ((<LETTER>)+ "=" (<BOOLEAN>)? (",")*)+ (")"))* ("\n") (" ")*)+ (" ") ")"
谢谢并感谢您的帮助!
答: 暂无答案
评论