编译原理:递归向下分析程序建立语法分析树的Java实现(一)
来源:互联网 发布:涂师傅数据恢复 编辑:程序博客网 时间:2024/06/04 18:16
考虑如下的源语言
消除first-first冲突和first-follow冲突后的文法:
1)program -> block2)block -> {decls stmts}3)decls -> decl decls | ε4)decl -> type id;5)type -> basic | type’6)type’ -> [num]type’ | ε7)basic -> int | bool8)stmts -> stmt stmts | ε9)stmt -> loc = bexpr;| if (bexpr) stmt elsmt| while (bexpr) stmt| do stmt while (bexpr);| break;| block10)elsmt -> else stmt | ε11)loc -> id loc’12)loc’ -> [aexpr]loc’ | ε13)bexpr -> join bexpr’14)bexpr’ -> || join bexpr’ | ε15)join -> equality join’16)join’ -> && equality join’ | ε17)equality -> rel equality’18)equality’ -> == rel equality’ | != rel equality’ | ε19)rel -> aexpr rel’20)rel’ -> < aexpr | <= aexpr | >= aexpr | > aexpr | ε21)aexpr -> term aexpr’22)aexpr’ -> +term aexpr’ | -term aexpr’ | ε23)term -> unary term’24)term’ -> *unary term’ | /unary term’ | ε25)unary -> !unary | -unary | factor26)factor -> (bexpr) | loc | num | true | false计算first集:
1)program: {{}2)block: {{}3)decls: {ε, int, bool}4)decl: {int, bool}5)type: {int, bool}6)type’: {ε, [}7)basic: {int, bool}8)stmts: {ε, if, while, do, break, {, id}9)stmt: {if, while, do, break, {, id}10)elsmt: {ε, else}11)loc: {id}12)loc’: {ε, []13)bexpr: {!, -, (, true, false, num, id}14)bexpr’: {ε, ||}15)join: {!, -, (, true, false, num, id}16)join’: { ε, &&}17)equality: {!, -, (, true, false, num, id}18)equality’: {ε, !=, ==}19)rel: {!, -, (, true, false, num, id}20)rel’: {ε, <, <=, >, >=}21)aexpr: {!, -, (, true, false, num, id}22)aexpr’: {ε, +, -}23)term: {!, -, (, true, false, num, id}24)term’: {ε, *, /}25)unary: {!, -, (, true, false, num, id}26)factor: {(, true, false, num, id)
通过消除左递归或提取左公因子改写文法,避免first-first冲突同时计算所有改写后产生式的first集,通过删除部分语句消除first-follow冲突得到LL(1)文法
阅读全文
0 0
- 编译原理:递归向下分析程序建立语法分析树的Java实现(一)
- 编译原理:递归向下分析程序建立语法分析树的Java实现(二)
- 【编译原理】自顶向下的语法分析之递归下降分析法
- 编译原理语法分析实验(Java实现)
- 【编译原理】语法分析——自上向下分析
- 【编译原理】语法分析(一)
- 编译原理:使用flex和bison工具实现语法分析树的建立
- 编译原理,自上而下非递归语法分析自上而下的语法分析
- 编译原理结构框架4自顶向下的语法分析
- 编译原理语法分析(java)
- <编译原理>自顶向下语法分析
- 【编译原理】非递归的预测分析法 JAVA实现
- 编译原理(递归下降分析程序)
- 编译原理之表达式语法分析(一)——自顶向下
- 语法分析(编译原理)
- 自顶向下的语法分析–递归下降分析–表达式求值
- 编译原理中的语法分析——自顶向下
- 编译原理之自顶向下语法分析方法
- java基础---线程的停止
- 时间复杂度和空间复杂度详解
- 而不是简单地诉诸情绪
- 前端知识架构整理
- 查询5037端口被占用
- 编译原理:递归向下分析程序建立语法分析树的Java实现(一)
- 网页2.点击链接打开窗口
- Anaconda+PyCharm+opencv
- 高斯卷积核如何生成 C语言实现
- 高精度乘法———列表法
- Spring MVC 到底是如何工作的?
- liang-Barskey算法
- sublime各种报错 unexpected indent Vue的ESlint缩进问题
- hdoj-4970Killing Monsters(树状数组)