我刚刚开始编写 DSL 并想使用 JISON ( http://zaach.github.io/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