私は次の文法を持っています:
cmds
: cmd+
;
cmd
: include_cmd | other_cmd
;
include_cmd
: INCLUDE DOUBLE_QUOTE FILE_NAME DOUBLE_QUOTE
;
other_cmd
: CMD_NAME ARG+
;
INCLUDE
: '#include'
;
DOUBLE_QUOTE
: '"'
;
CMD_NAME
: ('a'..'z')*
;
ARG
: ('a'..'z' | 'A'..'Z' | '0'..'9' | '_')+
;
FILE_NAME
: ('a'..'z' | 'A'..'Z' | '0'..'9' | '_' | '.')+
;
したがって、CMD_NAME、ARG、および FILE_NAME の違いは大きくなく、CMD_NAME は小文字でなければならず、ARG には大文字と「_」を使用でき、FILE_NAME には「.」を使用できます。
しかし、これには問題があります。- #include "abc", 'abc' は FILE_NAME ではなく CMD_NAME として解釈されます。文法ファイルで CMD_NAME が FILE_NAME の前にあるため、解析エラーが発生します。
これに対処するために予測などの手法に頼る必要がありますか? ホスト プログラミング言語に依存する以外に、純粋な EBNF ソリューションはありますか?
ありがとう。