1
我正在使用JavaCC爲簡單語言的解析器工作。定義令牌的「羣組」
在我的令牌聲明部分,我有這樣的事情
< CONSTANT: <INTEGER> | <FLOAT_NUMBER> | <BOOLEAN> >
< INTEGER: "0" | ("-")? ["1"-"9"](["0"-"9"])* | "0x" (["0"-"9"] | ["a"-"f"] | ["A"-"F"])+ >
< FLOAT_NUMBER: ("-")? (["0"-"9"])+ "." (["0"-"9"])+ ("E" ("-")? (["0"-"9"])+)? ("D")? >
< BOOLEAN: "true" | "false">
CONSTANT
,由於其訂單,比INTEGER
更高的優先級。但是,有些語法的部分地方我特別需要INTEGER
。在這些情況下,解析器會拋出異常,因爲INTEGER
被解析爲CONSTANT
。
一個簡單的解決方案是消除CONSTANT
令牌並找到並替換它爲(<INTEGER> | <FLOAT_NUMBER> | <BOOLEAN>)
。雖然這感覺相當笨拙。
有沒有辦法將CONSTANT
簡單地定義爲其他標記的分組,這樣CONSTANT
本身不是標記,而是(<INTEGER> | <FLOAT_NUMBER> | <BOOLEAN>)
的簡寫?
謝謝你的時間。
同意,謝謝。 –