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'