expression3.y
来自「语法分析 语法分析」· Y 代码 · 共 55 行
Y
55 行
%{{* 计算支持简单变量的数学表达式的yacc程序 编译:yacc Expression3 ExpressionY3 *}unit ExpressionY3;interfaceuses SysUtils, LexLib, YaccLib, ExpressionL3;{指定不同于整数的类型时,一定要使用%type <Real> expression 指定表达式的类型}{同时要使用 %token <Real> Number来指定token的类型}{注意, tp lex yacc不支持%union 标签,我们直接指定类型就可以了}var vbltable:array [0..25] of real;%}%token <integer> NAME%token <Real> NUMBER%type <Real> expression %left '-' '+'%left '*' '/'%nonassoc UMINUS%%statement_list: statement '\n' | statement_list statement '\n' ;statement: NAME '=' expression { vbltable[$1] := $3; } | expression { writeln(format('= %f', [$1])); } ;expression: expression '+' expression { $$ := $1 + $3; } | expression '-' expression { $$ := $1 - $3; } | expression '*' expression { $$ := $1 * $3; } | expression '/' expression { if($3 = 0.0) then yyerror('除零错误') else $$ := $1 / $3; } | '-' expression %prec UMINUS { $$ := -$2; } | '(' expression ')' { $$ := $2; } | NUMBER | NAME { $$ := vbltable[$1]; } ;%%end.
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?