我的lex代码是
/* 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(.感谢您为我花费的宝贵时间。
[a-zA-Z]
匹配单个字母字符(在本例中为字母b
(,返回FUNCTION
。当需要下一个标记时,它再次匹配单个字母字符(a
(,返回另一个FUNCTION
标记。但是,语法当然不允许连续两个FUNCTION
;正如它所说,它期待着(
。
你可能打算[a-zA-Z]+
,尽管更好的标识符模式是[A-Za-z_][A-Za-z0-9_]*
,它匹配my_function_2
之类的东西。