私は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 >)
お時間をいただきありがとうございます。