我有一個簡單的文件格式,我想用jison解析器生成器進行解析。該文件可以包含任意順序和數量的多個表達式。下面是解析器jison文件:Jison解析器在第一個規則後停止
/* lexical grammar */
%lex
%%
\s+ /* skip whitespace */
\"(\\.|[^"])*\" return 'STRING'
File\s*Version\s*\: return 'FILEVERSION'
[0-9]+("."[0-9]+)?\b return 'NUMBER'
<<EOF>> return 'EOF'
. return 'INVALID'
/lex
%start expressions
%% /* language grammar */
expressions
: EOF
| e expressions EOF
;
e
: STRING
| FILEID
;
FILEID
: FILEVERSION NUMBER { return $1 + $2; }
;
爲簡單起見,我已經縮短了文件,只有字符串和文件ID表達式。
我的問題是,如果第二個表達式只包含一個像字符串一樣的標記,則生成的解析器似乎只能識別一個或兩個完整表達式。例如:
文件版本:1.0
將被解析,或者
文件版本:1.0 「我的字符串」
此外還將進行解析,但對於
文件版本:1.0 「我的字符串」 「不解析字符串」
最後一個字符串不會被解析。
我試過jison debugger和jison page本身的代碼,但兩頁都顯示相同的結果。
我對這個問題的建議是:
- 一些詞法錯誤(正則表達式)
- 一些語法錯誤(左右遞歸)
- 一些行動分析器失蹤(一種{$$ = $ 1;})
- 其他一些野牛/ jison魔法我失蹤
我不是EBNF解析器導師所以請保持你的答案爲SIMPL儘可能。
哇,非常感謝你這個清晰全面的答案! – tomvodi