5、解析器生成器的使用与错误恢复

解析器生成器的使用与错误恢复

1. 解析器生成器概述

在处理复杂的语法解析任务时,手动构建LR(1)或LALR(1)解析表是一项繁琐且容易出错的工作。因此,人们开发了许多解析器生成器工具来自动化这个过程。其中,Yacc(“Yet another compiler - compiler”)是一个经典且广泛使用的解析器生成器,Bison和occs则是较新的实现。

1.1 Yacc规范结构

Yacc规范通常分为三个部分,由 %% 标记分隔:
1. 解析器声明 :包含终端符号、非终端符号等的列表。
2. 语法规则 :形式为 exp : exp PLUS exp { semantic action } 的产生式,其中 exp 是非终端符号, PLUS 是终端符号(标记),语义动作使用普通C语言编写,在解析器使用该规则进行归约时执行。
3. 程序 :是可用于前面部分嵌入的语义动作的普通C代码。

以下是一个Yacc规范的示例:

%{
int yylex(void);
void yyerror(char *s) { EM_error(EM_tokPos, "%s", s); }
%}
%token ID WHILE BEGIN END DO IF THEN ELSE SEMI ASSIGN
%start prog
%%
prog: stmli
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值