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;}
;
この最初のものは (基本的に) まったく機能しませんが、2 番目のものは少し機能します。文字列が見つかった場合、出力される値にはエスケープされた二重引用符が含まれます。
JISON/BISON/BNF 文法定義の学習に役立つ優れたリソースはありますか? 私は周りを見回してきましたが、私を助けるものを見つけることができませんでした; コンプ/科学専攻ではありません。シンプルなものやもっと充実したものを見逃しているだけですか?
いくつかのコンテキストについて:
単純な条件を解析するための単純な DSL を定義しようとしています。
IF Something > 100
AND Another == true
doAction 2.51