Jison (Bison 構文を使用する Javascript パーサー ジェネレーター) の使用方法を学ぼうとしています。
次のようなコードがあります。
a: "{{index()}}"
b: "{{blah(2, 'aba')}}"
string が渡された場合、およびindex()
string が渡された場合に返されるパーサーを作成しようとしています。(基本的に、メソッド呼び出しを含む文字列を解析する必要があります)。a
blah(2, 'aba')
b
私は Jison によって提供された例から適応しようとしてきましたが、解析がどのように機能するかを理解していないことが妨げになっています!
これが私の文法ファイルです:
/* lexical grammar */
%lex
%%
\s+ /* skip whitespace */
[a-zA-Z0-9]+ return 'STR'
"{{" return '{{'
"}}" return '}}'
<<EOF>> return 'EOF'
. return 'INVALID'
/lex
/* operator associations and precedence */
%token '{{' '}}'
%start expressions
%% /* language grammar */
expressions
: e EOF
{ typeof console !== 'undefined' ? console.log($1) : print($1);
return $1; }
;
e
: '{{' e '}}'
{$$ = yytext;}
| STR
{$$ = yytext;}
;
明らかに、まだ完全ではありません。括弧を認識しません。パーサーにこの文字列を渡す簡単な例から始めます{{index}}
。現在のパーサーにこれを与えると、 が返されます}}
。私の文法の(間違いなく間違った)理解に基づいて、私はそれが返されることを期待していindex
ます.
私は何を間違っていますか?