代码之家  ›  专栏  ›  技术社区  ›  ßãlãjî

如何在jison中编写自定义函数和变量?

  •  0
  • ßãlãjî  · 技术社区  · 5 年前

    /* 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);}
        ;
    

    我搞错了

    Parse error on line 1:
    balaji()
    -^
    Expecting '(', got 'FUNCTION'
    

    我想在这个解析器中传递myfun(a,b,…)和myfun(a)的内容。感谢您为我花费宝贵的时间。

    0 回复  |  直到 5 年前
        1
  •  1
  •   rici    5 年前

    [a-zA-Z] 匹配单个字母字符(在本例中,字母 b ),返回 FUNCTION . 当需要下一个标记时,它将再次匹配单个字母字符( a ),返回另一个 功能 代币。但是语法当然不允许两个连续的 s、 它期待着 (

    你可能想 [a-zA-Z]+ ,尽管更好的标识符模式是 [A-Za-z_][A-Za-z0-9_]* my_function_2 .

    推荐文章