我有以下的語法:如何使用類似的詞法分析器
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'被解釋爲CMD_NAME而不是FILE_NAME,我認爲這是因爲CMD_NAME在語法文件中的FILE_NAME之前,解析錯誤。
我是否必須依靠預測來處理這種技術?除了依賴主機編程語言之外,是否還有純粹的EBNF解決方案?
謝謝。
謝謝你這樣詳細的解釋,現在很清楚。我確實有一個問題,會問一個新的線程。 –