我正在尝试学习如何使用 Jison(一个使用 Bison 语法的 Javascript 解析器生成器)。
我有一些看起来像这样的代码:
a: "{{index()}}"
b: "{{blah(2, 'aba')}}"
我正在尝试创建一个解析器,index()
如果传递了 string a
,并且blah(2, 'aba')
如果传递了 string ,它将返回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
.
我究竟做错了什么?