本文主要是介绍编译原理 LR(0),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
讲解视频:编译原理LR(0)分析表(上)_哔哩哔哩_bilibili
【编译原理】LR(0)分析表分析输入串_哔哩哔哩_bilibili
拓广文法
已知G:S->(S)S | ε
拓广文法:
S' -> S
S -> (S)SS -> ε
写出所有项目
S' -> .S
S' -> S.
S -> .(S)S
S -> (.S)S
S -> (S.)S
S -> (S).S
S -> (S)S.
S -> .
构建项目规范簇
GOTO{ I0 , ( }的意思是在I0状态推进 '('
比如说I0 = S->.(S)S
GOTO(I0,S) = CLOUSRE(S->(.S)S) ( . 后移一位)
=(S->(.S)S,S->.(S)S,S->.) (自身再加上 . 后的非终结符S且具有S->.α的项目)
构造DFA
构造分析表
action写终结符,GOTO写非终结符
I0推进S到I1,就在I0行S列写上1
I0推进(到I1,就在I0行(写上S2
Ii(i = 0,1,2,3,4,5)是改造文法的第一个文法(S'->S)就在$那列写上acc
给改造文法标号:
0 S' -> S
1 S -> (S)S2 S -> ε
找 . 结尾的且是改造文法中的式子
比如I5:S->(S)S. ,I5的action部分全写上r1
这篇关于编译原理 LR(0)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!