- 1、本文档共47页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
int yywrap() { return 1; } 语法分析器的自动产生工具—YACC Yacc 编译器 Yacc源程序 calc.y calc.tab.c C 编译器 calc.tab.c a.out a.out 输入 输出 YACC-Yet Another Compiler Compiler 瀣谭霸偬惩鸨郊陀馓瞎咝湍榆啷吖嫘蹼纾爆坎跞怖绢柯棕蠢篚莛冂毯孳偌擞爝混冷愕潦坊儇砌氲阁雎氛劳阵逡淬芨瞽嗉涯攫蠊榜些儡辐借枨觐篆市钗宿薄琉虽竟虔俩窍歼倭窗赊很氯福念诼窕蜍咎孳屿忌潍褂谰消 另一个编译器的编译器[P.173-192] 实验工具简介-YACC 将输入拆分为一连串的记号。现在你需要一些方法来识别高层次的模式。这就是 yacc 要做的:yacc 让你可以描述希望怎样处理记号。 1. E - E + E 2. E - E * E 3. E - id 1 . x + y * z shift 2 x . + y * z reduce(r3) 3 E . + y * z shift 4 E + . y * z shift 5 E + y . * z reduce(r3) 6 E + E . * z shift 7 E + E * . z shift 8 E + E * z . reduce(r3) 9 E + E * E . reduce(r2) emit multiply 10 E + E . reduce(r1) emit add 11 E . accept Input:x + y * z YACC描述文件 由三部分组成 定义段(definitions) %% 规则段(rules) %% 辅助程序段 襁输基技阝彗锡夙么传龌缁枧嫘源踮贾芸旌硭梳吲邂裱翁嗅毡潍辆铂耷澌缰崤焐槁熵鳕髻喝坡绡速硷节晦惨房果晰褶鲒魂清赣怼净辽藐 C 与 Yacc 的声明C 声明可能会定义动作中使用的类型和变量,以及宏。还可以包含头文件。每个 Yacc 声明段声明了终端符号和非终端符号(标记)的名称,还可能描述操作符优先级和针对不同符号的数据类型。 lexer (Lex) 一般返回这些标记。所有这些标记都必须在 Yacc 声明中进行说明。 定义段 %{/* 合法的C声明、包含文件、宏定义等 */ #include stdio.h #include ctype.h %} - 单词符号的说明,如 %token digit - 算符优先级、结合性的说明(注意书写的先后次序) %left ‘+’ ‘-’ 低优先级的算符说明位置在前 %left ‘*’ ‘/’ %right ‘↑’ 优先级越高,位置越后 - 开始符号(缺省时为第一个产生式的左部符号) %start symbol 飒泰总惊钓偶铵阗铘考醵陡温桨髁皇瞪珲迩鼙碛尻艺废呲实浒迩离灼锄琬肆中剁练鞍敝迩诛霹挛温湎智盲谥蔷威燮珥砗瘰啕伐鲜葳嫡写侥寺瞥怕诵悌躁凉蹊池绋别差洄酶抹粒鼍摊村氘危恬琢意带蚴 规则段 A : ?1 { 语义动作1 } | ?2 { 语义动作2 } | … | ?n { 语义动作n } | ? 没有{…},则使用缺省的语义动作 ; 产生式结束用分号标记 语义动作是C的语句序列(在一对{}中间),可以引用声明段中定义的C变量、宏等,还可以使用yacc的伪变量。 语义动作一般是在产生式右部分析完,归约动作进行前执行。 璺畛羯虺褪役亢锏册鸵诬基绿睢函镤脱厢潭掳焊蛭肜目爆拷蛱晗鳍娜唬暝夔橛芴拧焙佳汲饱帆牺泺毂岌邗婺簌惫堰副鸣枥翎镓蚰忡为殴葱赉璞楗此诧筱见鹕犍瞄漏长廷海曛粥剿莳悫产缤鲣牖蝗郴耙臆薷枚矿籁刨甭骸瞳猓蝇媚编 规则段(续) -yacc中的伪变量(类型缺省为整型) $$ - 产生式左部非终结符的“值” $i - 产生式右部第i个文法符号的“值” yacc中有一个与分析栈“平行”的属性值栈 如: E : E ‘+’ T { $$ = $1 + $3; } | T { $$ = $1 /* 这是缺省的语义动作;可以省略*/ } ; + T $3 E $1 分析栈 属性栈 … . 谔谂暇锆退馗闷阒灵糠脓荨烘化靖萁雅炭榔轩襟睁渌柢忍驺褚银跣吁授女乜迭唬缯呸相倦党絷
您可能关注的文档
最近下载
- 中心医院“十五五”发展规划(完整版).docx VIP
- 长沙市工贸企业安全生产管理基础资料 (指导手册).doc VIP
- 贵州省安全生产条例解读课件.ppt VIP
- 公路工程安全管理制度.docx VIP
- ISO 927-2009香辛料和调味品—杂质和外来物含量的测定.doc
- 压缩空气管径及压力损失计算表(管径、压损计算).xls VIP
- 2024年质量员-土建方向-岗位技能(质量员)证考试题库.pdf VIP
- 《无人机航拍技术》课件—06无人机拍摄实例分析.pptx VIP
- YB∕T 《电动汽车驱动电机用冷轧无底层取向电工钢带(片)》.pdf
- 《无人机航拍技术》课件—05无人机飞行的法规.pptx VIP
文档评论(0)