这一章的目的是教您怎样在一个语言开发项目中使用pcyacc,为了达到这个目标,我们假定您熟悉c语言。我们同样假定您有一份abraxas pcyacc与一个c语言编译器(c compiler)。 【扩展信息:qmail队列清除办法之一】
v. 现在开始-一个简单例子
这一章给你使用pcyacc的程序开发流程的概述。本章的例子是一个简单的计算器,它能够做普通算术操作。这个例子将会向您展示它-我们暂时定名为sacalc(simple arithmetic calculator program)的pcyacc程序清单,同时举例说明怎样用pcyacc与c编译器建立可执行的sacalc,在稍后的一章中我们还会用一个稍微高级一点的例子来详细描述开发过程。
1.sacalc的语法描述文件(grammar description file)
下面是这个简单计算器例子的gdf代码文件:sacalc.y,为了引用的方便,我们在其中加入了行号(请注意,行号不能出现在您的gdl文件中)
01: %{02:
03: #define yystype double /* stack data type */
04:
05: %}
06:
07: %token number
08: %left ´+´ ´-´ /* left associative */
09: %left ´*´ ´/´ /* left associative */
10: %left unaryminus
11:
12: %%
13:
14: list: /* nothing */
15: | list ´\n´
16: | list expr ´\n´
17: { printf("\t%.8g\n", $2); }
18: | list error ´\n´
19: { yyerrok; }
20: ;
21:
22: expr: number
23: { $$ = $1; }
24: | ´-´ expr %prec unaryminus
25: { $$ = -$2; }
26: | expr ´+´ expr
27: { $$ = $1 + $3; }
28: | expr ´-´ expr
29: { $$ = $1 - $3; }
30: | expr ´*´ expr
31: { $$ = $1 * $3; }
32: | expr ´/´ expr
... 下一页