?? expr.y
字號:
/* Sample Yacc grammar for a simple desktop calculator; derived from a
4.9).
Lexical analyzer is in Lex program ExprLex.l.
To compile parser and lexical analyzer, issue the following commands:
yacc expr
lex exprlex
tpc expr
Description: This program reads simple arithmetic expressions, constructed
with real constants, operators +, -, *, /, unary - and parentheses
(operators have their usual precedence, unary minus is highest), from
standard input (one per line) and prints the result on standard output.
Variables are denoted by a single letter (no distinction between upper and
lowercase letters); they are assigned values through an assignment of the
form <var>=<expr>.
The program is terminated by entering an empty line. */
%{
uses YaccLib, LexLib;
var x : array [1..26] of Real;
%}
%token <Real> NUM /* constants */
%token <Integer> ID /* variables */
%type <Real> expr /* expressions */
%left '+' '-' /* operators */
%left '*' '/'
%right UMINUS
%token ILLEGAL /* illegal token */
%%
input : /* empty */
| input '\n' { yyaccept; }
| input expr '\n' { writeln($2:10:2); }
| input ID '=' expr '\n' { x[$2] := $4; writeln($4:10:2); }
| error '\n' { yyerrok; }
;
expr : expr '+' expr { $$ := $1 + $3; }
| expr '-' expr { $$ := $1 - $3; }
| expr '*' expr { $$ := $1 * $3; }
| expr '/' expr { $$ := $1 / $3; }
| '(' expr ')' { $$ := $2; }
| '-' expr { $$ := -$2; }
%prec UMINUS
| NUM { $$ := $1; }
| ID { $$ := x[$1]; }
;
%%
{$I ExprLex}
var i : Integer;
begin
for i := 1 to 26 do x[i] := 0.0;
if yyparse=0 then { done };
end.
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -