【编译原理】LR1程序文法的java实现【有firstfollow集,action和goto表,LR1分析过程】

12 篇文章 2 订阅

https://download.csdn.net/download/qinglingls/11167561 该下载有bug’(修复版本和代码在下面链接)
代码下载网址:
附有报告和修复了bug的版本
https://download.csdn.net/download/qinglingls/11183444

input.txt是输入的测试文件。
produce.txt是输入的LR1产生式,能力不大,能if,while,赋值,加,乘,不能处理任何嵌套,没有数组,(这个你可以自己加文法进去进行处理)
Grammar.txt是某个博客上的文法,看着很靠谱,但是我没有再做测试的心思了。。。

这个程序没啥bug,但是文法如果有左递归,那肯定是会出现stack overflow的(书上算法就是这么设计的)
另外LR文法不能有二义性,你得在文法里面把算术优先级给解决了。
另外如果加入嵌套,那必然复杂度指数上升,得跑很久。。。。十分钟似乎都不算多。。

运行指南:
gui.JtableParse3.java 显示LR1分析表,同时对input里面的文件进行分析。输出词法分析结果到output.txt
输出规约过程,很小一段语句可能就会很长的规约过程。
letex.LexResult.java 显示词法分析结果。输出全部识别出来的单词。

LR1识别实现完全在Parse3包里,自己看名字去读代码。
几乎每一个主要的类我都写了main()方法,可以自己输入一些产生式去试下,
比如书上给的:
S’ -> S
S -> C C
C -> c C|d
得到的集合和LR1的结果和书上完全一致

和一些网址上的
S’ -> S
S -> L = R
S -> R
L -> * R
L -> id
R -> L
你可以通过跑ItemTable.java 得到全部的集合和goto集合,
通过跑gotoTable.java 得到goto表
通过跑ActionTable.java 得到action表(cmd形式)
通过跑parse.java 得到两张表的合集和规约过程。
gui.JtableParse3.java 把上面的两张表合在一起图形化了。
我鼓励你发现我的bug 0虽然我不一定会决定去修改它,
但你可以发布修复bug的最新版本。注意标明原转载网址奥。

更加详细的思路和其他的说明,见下面的网址:
https://blog.csdn.net/qinglingLS
和:
【HIT哈工大编译原理实验】词法分析程序java
【编译原理】求first集合的代码实现java
【编译原理】求GOTO图的代码实现java
【编译原理】LL(1)分析法代码

其他的更新版本可以自己去博客里找一下噢。
写于2019/5/8

运行效果:在这里插入图片描述

一个能用的LR1文法:

S' -> <程序>
<程序> -> <声明列表>|<程序> <函数>
<声明列表> -> <声明>|<声明列表> <声明>
<声明> -> include < <标识符> > ;
<函数> -> <修饰符> <标识符> <形式参数> <复合语句>
<修饰符> -> void|int|char|float|double
<标识符> -> id
<形式参数> -> ( <数据类型> <标识符> )
<数据类型> -> int|float|double|char
<复合语句> -> { <语句列表> }|{ }
<语句列表> -> <语句>|<语句列表> <语句>
<语句> -> <条件语句>|<赋值语句>|<循环语句>
<赋值语句> -> <标识符> = <表达式> ;
<循环语句> -> while <b> do { <赋值语句> } ;
<条件语句> -> <S1>|<S2>
<S1> -> if <b> { <赋值语句> } else { <赋值语句> }
<S2> -> if <b> { <赋值语句> }
<b> -> ( <逻辑表达式> )
<逻辑表达式> -> <标识符> <逻辑运算符> <标识符>
<逻辑运算符> -> >=|<=|<|!|==|!=|>
<表达式> -> <表达式> + T|T
T -> F * F|F / F|F
F -> digit|<标识符>

测试代码:

include <id> ; 
void id (int id)
{
 while(id > id)
  do{id=id*id;}; 
 if(id != id)
 {id=id*id;}
 }
 
 void id (int id)
{
 while(id < id)
  do{ id=digit+id* id;}; 
 if(id != id)
 {id=id*id;}
 }
$

结果:词法分析:

[include, <, id, >, ;, void, id, (, int, id, ), {, while, (, id, >, id, ), 
do, {, id, =, id, *, id, ;, }, ;, if, (, id, !=, id, ), {, id, =, id, 
*, id, ;, }, }, void, id, (, int, id, ), {, while, (, id, <, id, ), do,
 {, id, =, digit, +, id, *, id, ;, }, ;, if, (, id, !=, id, ), {, id, =, id,
  *, id, ;, }, }, $]

语法分析结果:

移入include
action   I4
移入<
action   I13
移入id
action   I15
堆栈中的元素:I0 I4 I13 I15 
规约<标识符>->id
堆栈中的元素:I0 I4 I13 I14 
移入>
action   I18
移入;
action   I23
堆栈中的元素:I0 I4 I13 I14 I18 I23 
规约<声明>->include<<标识符>>;
堆栈中的元素:I0 I3 
堆栈中的元素:I0 I3 
规约<声明列表>-><声明>
堆栈中的元素:I0 I2 
堆栈中的元素:I0 I2 
规约<程序>-><声明列表>
堆栈中的元素:I0 I1 
移入void
action   I7
堆栈中的元素:I0 I1 I7 
规约<修饰符>->void
堆栈中的元素:I0 I1 I6 
移入id
action   I17
堆栈中的元素:I0 I1 I6 I17 
规约<标识符>->id
堆栈中的元素:I0 I1 I6 I16 
移入(
action   I20
移入int
action   I25
堆栈中的元素:I0 I1 I6 I16 I20 I25 
规约<数据类型>->int
堆栈中的元素:I0 I1 I6 I16 I20 I24 
移入id
action   I42
堆栈中的元素:I0 I1 I6 I16 I20 I24 I42 
规约<标识符>->id
堆栈中的元素:I0 I1 I6 I16 I20 I24 I41 
移入)
action   I43
堆栈中的元素:I0 I1 I6 I16 I20 I24 I41 I43 
规约<形式参数>->(<数据类型><标识符>)
堆栈中的元素:I0 I1 I6 I16 I19 
移入{
action   I22
移入while
action   I38
移入(
action   I48
移入id
action   I69
堆栈中的元素:I0 I1 I6 I16 I19 I22 I38 I48 I69 
规约<标识符>->id
堆栈中的元素:I0 I1 I6 I16 I19 I22 I38 I48 I68 
移入>
action   I96
堆栈中的元素:I0 I1 I6 I16 I19 I22 I38 I48 I68 I96 
规约<逻辑运算符>->>
堆栈中的元素:I0 I1 I6 I16 I19 I22 I38 I48 I68 I89 
移入id
action   I42
堆栈中的元素:I0 I1 I6 I16 I19 I22 I38 I48 I68 I89 I42 
规约<标识符>->id
堆栈中的元素:I0 I1 I6 I16 I19 I22 I38 I48 I68 I89 I117 
堆栈中的元素:I0 I1 I6 I16 I19 I22 I38 I48 I68 I89 I117 
规约<逻辑表达式>-><标识符><逻辑运算符><标识符>
堆栈中的元素:I0 I1 I6 I16 I19 I22 I38 I48 I73 
移入)
action   I82
堆栈中的元素:I0 I1 I6 I16 I19 I22 I38 I48 I73 I82 
规约<b>->(<逻辑表达式>)
堆栈中的元素:I0 I1 I6 I16 I19 I22 I38 I47 
移入do
action   I74
移入{
action   I88
移入id
action   I59
堆栈中的元素:I0 I1 I6 I16 I19 I22 I38 I47 I74 I88 I59 
规约<标识符>->id
堆栈中的元素:I0 I1 I6 I16 I19 I22 I38 I47 I74 I88 I79 
移入=
action   I115
移入id
action   I129
堆栈中的元素:I0 I1 I6 I16 I19 I22 I38 I47 I74 I88 I79 I115 I129 
规约<标识符>->id
堆栈中的元素:I0 I1 I6 I16 I19 I22 I38 I47 I74 I88 I79 I115 I128 
堆栈中的元素:I0 I1 I6 I16 I19 I22 I38 I47 I74 I88 I79 I115 I128 
规约F-><标识符>
堆栈中的元素:I0 I1 I6 I16 I19 I22 I38 I47 I74 I88 I79 I115 I101 
移入*
action   I118
移入id
action   I131
堆栈中的元素:I0 I1 I6 I16 I19 I22 I38 I47 I74 I88 I79 I115 I101 I118 I131 
规约<标识符>->id
堆栈中的元素:I0 I1 I6 I16 I19 I22 I38 I47 I74 I88 I79 I115 I101 I118 I109 
堆栈中的元素:I0 I1 I6 I16 I19 I22 I38 I47 I74 I88 I79 I115 I101 I118 I109 
规约F-><标识符>
堆栈中的元素:I0 I1 I6 I16 I19 I22 I38 I47 I74 I88 I79 I115 I101 I118 I139 
堆栈中的元素:I0 I1 I6 I16 I19 I22 I38 I47 I74 I88 I79 I115 I101 I118 I139 
规约T->F*F
堆栈中的元素:I0 I1 I6 I16 I19 I22 I38 I47 I74 I88 I79 I115 I126 
堆栈中的元素:I0 I1 I6 I16 I19 I22 I38 I47 I74 I88 I79 I115 I126 
规约<表达式>->T
堆栈中的元素:I0 I1 I6 I16 I19 I22 I38 I47 I74 I88 I79 I115 I124 
移入;
action   I137
堆栈中的元素:I0 I1 I6 I16 I19 I22 I38 I47 I74 I88 I79 I115 I124 I137 
规约<赋值语句>-><标识符>=<表达式>;
堆栈中的元素:I0 I1 I6 I16 I19 I22 I38 I47 I74 I88 I113 
移入}
action   I122
移入;
action   I135
堆栈中的元素:I0 I1 I6 I16 I19 I22 I38 I47 I74 I88 I113 I122 I135 
规约<循环语句>->while<b>do{<赋值语句>};
堆栈中的元素:I0 I1 I6 I16 I19 I22 I34 
堆栈中的元素:I0 I1 I6 I16 I19 I22 I34 
规约<语句>-><循环语句>
堆栈中的元素:I0 I1 I6 I16 I19 I22 I31 
堆栈中的元素:I0 I1 I6 I16 I19 I22 I31 
规约<语句列表>-><语句>
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 
移入if
action   I58
移入(
action   I46
移入id
action   I69
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 I58 I46 I69 
规约<标识符>->id
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 I58 I46 I68 
移入!=
action   I95
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 I58 I46 I68 I95 
规约<逻辑运算符>->!=
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 I58 I46 I68 I89 
移入id
action   I42
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 I58 I46 I68 I89 I42 
规约<标识符>->id
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 I58 I46 I68 I89 I117 
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 I58 I46 I68 I89 I117 
规约<逻辑表达式>-><标识符><逻辑运算符><标识符>
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 I58 I46 I67 
移入)
action   I97
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 I58 I46 I67 I97 
规约<b>->(<逻辑表达式>)
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 I58 I75 
移入{
action   I85
移入id
action   I80
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 I58 I75 I85 I80 
规约<标识符>->id
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 I58 I75 I85 I79 
移入=
action   I115
移入id
action   I129
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 I58 I75 I85 I79 I115 I129 
规约<标识符>->id
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 I58 I75 I85 I79 I115 I128 
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 I58 I75 I85 I79 I115 I128 
规约F-><标识符>
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 I58 I75 I85 I79 I115 I101 
移入*
action   I118
移入id
action   I131
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 I58 I75 I85 I79 I115 I101 I118 I131 
规约<标识符>->id
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 I58 I75 I85 I79 I115 I101 I118 I109 
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 I58 I75 I85 I79 I115 I101 I118 I109 
规约F-><标识符>
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 I58 I75 I85 I79 I115 I101 I118 I139 
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 I58 I75 I85 I79 I115 I101 I118 I139 
规约T->F*F
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 I58 I75 I85 I79 I115 I126 
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 I58 I75 I85 I79 I115 I126 
规约<表达式>->T
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 I58 I75 I85 I79 I115 I124 
移入;
action   I137
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 I58 I75 I85 I79 I115 I124 I137 
规约<赋值语句>-><标识符>=<表达式>;
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 I58 I75 I85 I111 
移入}
action   I121
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 I58 I75 I85 I111 I121 
规约<S2>->if<b>{<赋值语句>}
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 I55 
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 I55 
规约<条件语句>-><S2>
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 I51 
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 I51 
规约<语句>-><条件语句>
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 I50 
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 I50 
规约<语句列表>-><语句列表><语句>
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 
移入}
action   I49
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 I49 
规约<复合语句>->{<语句列表>}
堆栈中的元素:I0 I1 I6 I16 I19 I21 
堆栈中的元素:I0 I1 I6 I16 I19 I21 
规约<函数>-><修饰符><标识符><形式参数><复合语句>
堆栈中的元素:I0 I1 I5 
堆栈中的元素:I0 I1 I5 
规约<程序>-><程序><函数>
堆栈中的元素:I0 I1 
移入void
action   I7
堆栈中的元素:I0 I1 I7 
规约<修饰符>->void
堆栈中的元素:I0 I1 I6 
移入id
action   I17
堆栈中的元素:I0 I1 I6 I17 
规约<标识符>->id
堆栈中的元素:I0 I1 I6 I16 
移入(
action   I20
移入int
action   I25
堆栈中的元素:I0 I1 I6 I16 I20 I25 
规约<数据类型>->int
堆栈中的元素:I0 I1 I6 I16 I20 I24 
移入id
action   I42
堆栈中的元素:I0 I1 I6 I16 I20 I24 I42 
规约<标识符>->id
堆栈中的元素:I0 I1 I6 I16 I20 I24 I41 
移入)
action   I43
堆栈中的元素:I0 I1 I6 I16 I20 I24 I41 I43 
规约<形式参数>->(<数据类型><标识符>)
堆栈中的元素:I0 I1 I6 I16 I19 
移入{
action   I22
移入while
action   I38
移入(
action   I48
移入id
action   I69
堆栈中的元素:I0 I1 I6 I16 I19 I22 I38 I48 I69 
规约<标识符>->id
堆栈中的元素:I0 I1 I6 I16 I19 I22 I38 I48 I68 
移入<
action   I92
堆栈中的元素:I0 I1 I6 I16 I19 I22 I38 I48 I68 I92 
规约<逻辑运算符>-><
堆栈中的元素:I0 I1 I6 I16 I19 I22 I38 I48 I68 I89 
移入id
action   I42
堆栈中的元素:I0 I1 I6 I16 I19 I22 I38 I48 I68 I89 I42 
规约<标识符>->id
堆栈中的元素:I0 I1 I6 I16 I19 I22 I38 I48 I68 I89 I117 
堆栈中的元素:I0 I1 I6 I16 I19 I22 I38 I48 I68 I89 I117 
规约<逻辑表达式>-><标识符><逻辑运算符><标识符>
堆栈中的元素:I0 I1 I6 I16 I19 I22 I38 I48 I73 
移入)
action   I82
堆栈中的元素:I0 I1 I6 I16 I19 I22 I38 I48 I73 I82 
规约<b>->(<逻辑表达式>)
堆栈中的元素:I0 I1 I6 I16 I19 I22 I38 I47 
移入do
action   I74
移入{
action   I88
移入id
action   I59
堆栈中的元素:I0 I1 I6 I16 I19 I22 I38 I47 I74 I88 I59 
规约<标识符>->id
堆栈中的元素:I0 I1 I6 I16 I19 I22 I38 I47 I74 I88 I79 
移入=
action   I115
移入digit
action   I127
堆栈中的元素:I0 I1 I6 I16 I19 I22 I38 I47 I74 I88 I79 I115 I127 
规约F->digit
堆栈中的元素:I0 I1 I6 I16 I19 I22 I38 I47 I74 I88 I79 I115 I101 
堆栈中的元素:I0 I1 I6 I16 I19 I22 I38 I47 I74 I88 I79 I115 I101 
规约T->F
堆栈中的元素:I0 I1 I6 I16 I19 I22 I38 I47 I74 I88 I79 I115 I126 
堆栈中的元素:I0 I1 I6 I16 I19 I22 I38 I47 I74 I88 I79 I115 I126 
规约<表达式>->T
堆栈中的元素:I0 I1 I6 I16 I19 I22 I38 I47 I74 I88 I79 I115 I124 
移入+
action   I138
移入id
action   I147
堆栈中的元素:I0 I1 I6 I16 I19 I22 I38 I47 I74 I88 I79 I115 I124 I138 I147 
规约<标识符>->id
堆栈中的元素:I0 I1 I6 I16 I19 I22 I38 I47 I74 I88 I79 I115 I124 I138 I146 
堆栈中的元素:I0 I1 I6 I16 I19 I22 I38 I47 I74 I88 I79 I115 I124 I138 I146 
规约F-><标识符>
堆栈中的元素:I0 I1 I6 I16 I19 I22 I38 I47 I74 I88 I79 I115 I124 I138 I101 
移入*
action   I118
移入id
action   I131
堆栈中的元素:I0 I1 I6 I16 I19 I22 I38 I47 I74 I88 I79 I115 I124 I138 I101 I118 I131 
规约<标识符>->id
堆栈中的元素:I0 I1 I6 I16 I19 I22 I38 I47 I74 I88 I79 I115 I124 I138 I101 I118 I109 
堆栈中的元素:I0 I1 I6 I16 I19 I22 I38 I47 I74 I88 I79 I115 I124 I138 I101 I118 I109 
规约F-><标识符>
堆栈中的元素:I0 I1 I6 I16 I19 I22 I38 I47 I74 I88 I79 I115 I124 I138 I101 I118 I139 
堆栈中的元素:I0 I1 I6 I16 I19 I22 I38 I47 I74 I88 I79 I115 I124 I138 I101 I118 I139 
规约T->F*F
堆栈中的元素:I0 I1 I6 I16 I19 I22 I38 I47 I74 I88 I79 I115 I124 I138 I148 
堆栈中的元素:I0 I1 I6 I16 I19 I22 I38 I47 I74 I88 I79 I115 I124 I138 I148 
规约<表达式>-><表达式>+T
堆栈中的元素:I0 I1 I6 I16 I19 I22 I38 I47 I74 I88 I79 I115 I124 
移入;
action   I137
堆栈中的元素:I0 I1 I6 I16 I19 I22 I38 I47 I74 I88 I79 I115 I124 I137 
规约<赋值语句>-><标识符>=<表达式>;
堆栈中的元素:I0 I1 I6 I16 I19 I22 I38 I47 I74 I88 I113 
移入}
action   I122
移入;
action   I135
堆栈中的元素:I0 I1 I6 I16 I19 I22 I38 I47 I74 I88 I113 I122 I135 
规约<循环语句>->while<b>do{<赋值语句>};
堆栈中的元素:I0 I1 I6 I16 I19 I22 I34 
堆栈中的元素:I0 I1 I6 I16 I19 I22 I34 
规约<语句>-><循环语句>
堆栈中的元素:I0 I1 I6 I16 I19 I22 I31 
堆栈中的元素:I0 I1 I6 I16 I19 I22 I31 
规约<语句列表>-><语句>
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 
移入if
action   I58
移入(
action   I46
移入id
action   I69
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 I58 I46 I69 
规约<标识符>->id
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 I58 I46 I68 
移入!=
action   I95
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 I58 I46 I68 I95 
规约<逻辑运算符>->!=
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 I58 I46 I68 I89 
移入id
action   I42
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 I58 I46 I68 I89 I42 
规约<标识符>->id
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 I58 I46 I68 I89 I117 
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 I58 I46 I68 I89 I117 
规约<逻辑表达式>-><标识符><逻辑运算符><标识符>
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 I58 I46 I67 
移入)
action   I97
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 I58 I46 I67 I97 
规约<b>->(<逻辑表达式>)
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 I58 I75 
移入{
action   I85
移入id
action   I80
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 I58 I75 I85 I80 
规约<标识符>->id
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 I58 I75 I85 I79 
移入=
action   I115
移入id
action   I129
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 I58 I75 I85 I79 I115 I129 
规约<标识符>->id
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 I58 I75 I85 I79 I115 I128 
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 I58 I75 I85 I79 I115 I128 
规约F-><标识符>
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 I58 I75 I85 I79 I115 I101 
移入*
action   I118
移入id
action   I131
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 I58 I75 I85 I79 I115 I101 I118 I131 
规约<标识符>->id
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 I58 I75 I85 I79 I115 I101 I118 I109 
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 I58 I75 I85 I79 I115 I101 I118 I109 
规约F-><标识符>
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 I58 I75 I85 I79 I115 I101 I118 I139 
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 I58 I75 I85 I79 I115 I101 I118 I139 
规约T->F*F
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 I58 I75 I85 I79 I115 I126 
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 I58 I75 I85 I79 I115 I126 
规约<表达式>->T
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 I58 I75 I85 I79 I115 I124 
移入;
action   I137
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 I58 I75 I85 I79 I115 I124 I137 
规约<赋值语句>-><标识符>=<表达式>;
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 I58 I75 I85 I111 
移入}
action   I121
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 I58 I75 I85 I111 I121 
规约<S2>->if<b>{<赋值语句>}
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 I55 
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 I55 
规约<条件语句>-><S2>
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 I51 
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 I51 
规约<语句>-><条件语句>
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 I50 
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 I50 
规约<语句列表>-><语句列表><语句>
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 
移入}
action   I49
堆栈中的元素:I0 I1 I6 I16 I19 I22 I29 I49 
规约<复合语句>->{<语句列表>}
堆栈中的元素:I0 I1 I6 I16 I19 I21 
堆栈中的元素:I0 I1 I6 I16 I19 I21 
规约<函数>-><修饰符><标识符><形式参数><复合语句>
堆栈中的元素:I0 I1 I5 
堆栈中的元素:I0 I1 I5 
规约<程序>-><程序><函数>
堆栈中的元素:I0 I1 
接收!!!!!!!!!!!!!!!!!!!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值