0
我剛剛開始編寫DSL並希望使用JISON(http://zaach.github.io/jison)。我正在嘗試學習語法語法,並遇到用雙引號指定字符串的問題。如何在JISON中定義一個字符串
什麼我想會的工作是:
%lex
%%
[\n\s]+ /* skip whitespace */
"true"|"false" return 'BOOL'
"IF" return 'START'
"AND"|"OR" return 'LOGIC'
<<EOF>> return 'EOF'
. return 'INVALID'
/lex
%start string
%%
string
: '"' [^"]+ '"'
{$$ = $2;}
;
...或者是:
%lex
%%
[\n\s]+ /* skip whitespace */
"true"|"false" return 'BOOL'
"IF" return 'START'
"AND"|"OR" return 'LOGIC'
\"[^"]+\" return 'STRING'
<<EOF>> return 'EOF'
. return 'INVALID'
/lex
%start string
%%
string
: STRING
{$$ = $1;}
;
這第一(基本)不會在所有的工作,而第二個作品還挺;當它發現一個字符串時,出來的值包括逃脫的雙引號。
有沒有很好的資源可以幫助學習JISON/BISON/BNF語法定義?我一直在環顧四周,但一直未能找到任何有助於我的事情;不是comp/sci專業。我只是想念一些簡單的東西或更重要的東西?
對於一些背景:
我試圖定義一個簡單的DSL解析簡單的條件:
IF Something > 100
AND Another == true
doAction 2.51
謝謝。我正在嘗試使用'yytext.replace(/ \\「/ g,'')'這種方式,但最初並沒有工作,但是這是或者你認爲這是一種」正確「的方式來做這種野牛/ jison ?我覺得有點「哈克」這樣做,但如果它是如何完成,那麼我很好。 – kalisjoshua 2014-09-19 11:12:53
@kalisjoshua我不知道有任何其他方式做到這一點;這當然是我會怎麼做'flex '(儘管在'flex'中你必須複製'yytext',所以你可能覺得它不那麼「哈哈」:))。 – rici 2014-09-19 16:34:38