/* 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 ),返回另一个 功能 代币。但是语法当然不允许两个连续的 s、 它期待着 (
[a-zA-Z]
b
FUNCTION
a
功能
(
你可能想 [a-zA-Z]+ ,尽管更好的标识符模式是 [A-Za-z_][A-Za-z0-9_]* my_function_2 .
[a-zA-Z]+
[A-Za-z_][A-Za-z0-9_]*
my_function_2