1

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
4

1 に答える 1