兔子的技术博客

兔子

   :: 首页 :: 联系 :: 聚合  :: 管理
  202 Posts :: 0 Stories :: 43 Comments :: 0 Trackbacks

留言簿(10)

最新评论

阅读排行榜

评论排行榜

      以下是针对 Parser generator 2.07 中的 Class 例子的笔记;要查看完整的工程和代码,可参考原例。

       

标题

说明

分析栈和属性栈

  • 分析栈:保存当前的文法符号,即,终结符或非终结符。
  • 属性栈:保存当前文法符号对应的数据(类似'属性文法'中的属性),在 Parser Generator 中该数据类型为 YYSTYPE ,用户可以自己定义该类型。

%token <value> NUMBER

用来说明文法符号和属性的关系

NUMBER 为词法分析器中返回的一种符号类型;
<value> 指出 NUMBER 和属性中的 value 成员对应。

%type <value> expr

用来指明非终结符 expr 对应于属性中的 value 成员

符号的顺序和优先级

按定义的顺序,由低到高;即,越靠后的符号,优先级越高,例如:
%right '='

%left   '+', '-'

%left   '*', '/'

%right UMINUS

。。。
| '-' expr %prec
UMINUS { $$ = -$2; }
。。。

%prec 指定本条规则的优先级。本例中,指明 '-' 和右边的表达式结合时,优先级和 UMINUS 相同;而注意到,UMINUS 在之前定义为比其他四则运算符优先!

规约过程中的文法符号和属性引用

$$

:当前规约表达式的结果

$1$2…

:从左至右依次表示规约表达式中的符号

注意:如果文法属性为自定义结构,通过$引用时,其值和符号声明中的 <xxxx> 成员对应。例如:

%token <value> NUMBER

修改默认的输入源

重载 yylexer::yygetchar() 虚函数;而不是之前认为的 yylexer::yyinput()

posted on 2009-08-14 15:26 会飞的兔子 阅读(585) 评论(0)  编辑 收藏 引用 所属分类: 编译原理

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理