Parsing 如何在jison中编写自定义函数和变量?
我的莱克斯密码是Parsing 如何在jison中编写自定义函数和变量?,parsing,jison,Parsing,Jison,我的莱克斯密码是 /* description: Parses end executes mathematical expressions. */ /* lexical grammar */ %lex %% \s+ /* skip whitespace */ [0-9]+("."[0-9]+)?\b return 'NUMBER' [a-zA-Z] return 'FUNCTION' <<EOF>>
/* description: Parses end executes mathematical expressions. */
/* lexical grammar */
%lex
%%
\s+ /* skip whitespace */
[0-9]+("."[0-9]+)?\b return 'NUMBER'
[a-zA-Z] return 'FUNCTION'
<<EOF>> return 'EOF'
. return 'INVALID'
/lex
/* operator associations and precedence */
%start expressions
%% /* language grammar */
expressions
: e EOF
{return $1;}
;
e
| FUNCTION '('e')'
{$$=$3}
| NUMBER
{$$ = Number(yytext);}
;
我想在此解析器中传递的是myfun(a,b,…)和myfun(a)。感谢您为我花费宝贵的时间。
[a-zA-Z]
匹配单个字母字符(在本例中是字母b
),返回函数。当需要下一个令牌时,它再次匹配单个字母字符(a
),返回另一个函数
令牌。当然,语法不允许两个连续的函数
s;它期待一个(
,如它所说)
您可能打算使用[a-zA-Z]+
,尽管更好的标识符模式是[a-zA-Z][a-zA-z0-9]*
,它与my_function\u 2
之类的东西相匹配谢谢你,Rici,我同意你的答案,然后如何分配变量@ßßlãjî:lexer不知道标识符是函数还是变量。因此,如果你的语言两者都有,你的lexer需要识别“identifier”令牌。我是你的表达式语法,你会发现函数调用是明确的。互联网上有很多计算器示例,包括《野牛手册》中的一些优秀示例。Rici,我找不到任何文章,你能分享任何链接吗?这是《野牛手册》中的示例。不过,我建议你阅读完整的示例章节:Than你知道吗,里希,这就是我想要的。
Parse error on line 1:
balaji()
-^
Expecting '(', got 'FUNCTION'