自底向上分析方法,也称移进-归约分析法,粗略地说它的实现思想是对输入符号串自左向右进行扫描,并将输入符逐个移入一个后进先出栈中,边移入边分析,一旦栈顶符号串形成某个句型的句柄时,就用该产生式的左部非终结符代替相应右部的文法符号串,这称为归约。重复这一过程直到归约到栈顶中只剩文法的开始符号时则为分析成功,也就确认输入串是文法的句子。

概述

设文法G[S]为:
(1)S→aAcBe
(2)A→b
(3)A→Ab
(4)B→d

对输入串abbcde#进行分析,检查该符号串是否是G[S]的句子
由于自底向上分析的移进-归约过程是自顶向下最右推导的逆过程,而最右推导为规范推导,自左向右的归约过程也称为规范归约。

步骤 符号栈 输入符串 动作
1 # abbcde# 移进
2 #a bbcde# 移进
3 #ab bcde# 归约(A->b)
4 #aAb cde# 归约(A->Ab)
5 #aAc de# 移进
6 #aAcd e# 归约(B->d)
7 #aAcBe # 归约(S→aAcBe)
9 #S# 接受

在上述移进-归约或自底向上构造语法树的过程中,考虑几个问题:

  1. 何时移进?
  2. 何时归约?
  3. 将哪个字符串归约?

当 一个文法无二义性时,那么它对一个句子的规范推导是唯一的,规范规约也必然是唯一的。因而每次归约时要找当前句型的句柄,也就是说,任何时候栈中的符号串和剩余的输入串组成一个句型,当句柄出现在栈顶符号串中时,则可用句柄归约,这样一直归约到输入串只剩结束符,文法符号栈中只剩开始符号。

由此可见,自底向上分析的关键问题是在分析过程中如何确定句柄,即如何知道何时在栈顶符号串中已形成某句型的句柄。然而自底向上的分析算法很多,目前常用的算符优先分析LR类分析法。

直观算符优先分析法

给定文法G[E]:
E → E + E
E -> E - E
E -> E * E
E -> E / E
E -> E ↑ E 表示次方2↑3↑2 = 2↑9 = 512
E -> ( E )
E -> i

1.规定算法的优先关系如下:

1)↑ 优先级最高,具有右结合性( ↑ < ↑ )【注:表示次方2↑3↑2 = 2↑9 = 512】
2)*和/优先级低于↑,具有左结合性
3)+和-优先级最低,具有左结合性
4)(和),括号的优先级小于括号内运算符,大于括号外运算符优先级;内括号的优先级大于外括号的优先级
5)任何于#相邻的符号的优先级都大于#

2.算符优先关系表如下

+ - * / ( ) i #
+ > > < < < < > < >
- > > < < < < > < >
* > > > > < < > < >
/ > > > > < < > < >
> > > > < < > < >
( < < < < < < = <
) > > > > > > >
i > > > > > > >
# < < < < < < < =

3.输入字符串i + i * i

步骤 符号栈 当前输入符 输入符串 动作
1 # i +i*i# 移进(#<i)
2 #i + i*i# 归约(i>+)
3 #E + i*i# 移进(#<+)
4 #E+ i *i# 移进(+<i)
5 #E+i * i# 归约(i>*)
6 #E+E * i# 移进(+>*)
7 #E+E* i # 移进(*<i)
8 #E+E*i # 归约(i>#)
9 #E+E*E # 归约(*>#)
10 #E+E # 归约(+>#)
11 #E # acc

算符优先分析法

算符优先分析法(Operator Precedence
Parse)是仿效四则运算的计算过程而构造的一种语法分析方法。算符优先分析法的关键是比较两个相继出现的终结符的优先级而决定应采取的动作。

给文法一点的限制,把符号优先线顺序反应在文法中,再用方法求出其算符优先关系表。详情(略)

LR(0)分析

给定文法G[E]:
(1) E -> aA|bB
(2) A -> cA|d
(3) B->cB|d
G[E]的拓广文法,得到G [S’]:
(0) S’ -> E
(1) E -> aA|bB
(2)A -> cA|d
(3) B->cB|d

构造G[S’] 的 LR(0) FSM

#mermaid-svg-sy5jU3tj3vX83reJ .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-sy5jU3tj3vX83reJ .label text{fill:#333}#mermaid-svg-sy5jU3tj3vX83reJ .node rect,#mermaid-svg-sy5jU3tj3vX83reJ .node circle,#mermaid-svg-sy5jU3tj3vX83reJ .node ellipse,#mermaid-svg-sy5jU3tj3vX83reJ .node polygon,#mermaid-svg-sy5jU3tj3vX83reJ .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-sy5jU3tj3vX83reJ .node .label{text-align:center;fill:#333}#mermaid-svg-sy5jU3tj3vX83reJ .node.clickable{cursor:pointer}#mermaid-svg-sy5jU3tj3vX83reJ .arrowheadPath{fill:#333}#mermaid-svg-sy5jU3tj3vX83reJ .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-sy5jU3tj3vX83reJ .flowchart-link{stroke:#333;fill:none}#mermaid-svg-sy5jU3tj3vX83reJ .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-sy5jU3tj3vX83reJ .edgeLabel rect{opacity:0.9}#mermaid-svg-sy5jU3tj3vX83reJ .edgeLabel span{color:#333}#mermaid-svg-sy5jU3tj3vX83reJ .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-sy5jU3tj3vX83reJ .cluster text{fill:#333}#mermaid-svg-sy5jU3tj3vX83reJ div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-sy5jU3tj3vX83reJ .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-sy5jU3tj3vX83reJ text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-sy5jU3tj3vX83reJ .actor-line{stroke:grey}#mermaid-svg-sy5jU3tj3vX83reJ .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-sy5jU3tj3vX83reJ .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-sy5jU3tj3vX83reJ #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-sy5jU3tj3vX83reJ .sequenceNumber{fill:#fff}#mermaid-svg-sy5jU3tj3vX83reJ #sequencenumber{fill:#333}#mermaid-svg-sy5jU3tj3vX83reJ #crosshead path{fill:#333;stroke:#333}#mermaid-svg-sy5jU3tj3vX83reJ .messageText{fill:#333;stroke:#333}#mermaid-svg-sy5jU3tj3vX83reJ .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-sy5jU3tj3vX83reJ .labelText,#mermaid-svg-sy5jU3tj3vX83reJ .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-sy5jU3tj3vX83reJ .loopText,#mermaid-svg-sy5jU3tj3vX83reJ .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-sy5jU3tj3vX83reJ .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-sy5jU3tj3vX83reJ .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-sy5jU3tj3vX83reJ .noteText,#mermaid-svg-sy5jU3tj3vX83reJ .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-sy5jU3tj3vX83reJ .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-sy5jU3tj3vX83reJ .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-sy5jU3tj3vX83reJ .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-sy5jU3tj3vX83reJ .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-sy5jU3tj3vX83reJ .section{stroke:none;opacity:0.2}#mermaid-svg-sy5jU3tj3vX83reJ .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-sy5jU3tj3vX83reJ .section2{fill:#fff400}#mermaid-svg-sy5jU3tj3vX83reJ .section1,#mermaid-svg-sy5jU3tj3vX83reJ .section3{fill:#fff;opacity:0.2}#mermaid-svg-sy5jU3tj3vX83reJ .sectionTitle0{fill:#333}#mermaid-svg-sy5jU3tj3vX83reJ .sectionTitle1{fill:#333}#mermaid-svg-sy5jU3tj3vX83reJ .sectionTitle2{fill:#333}#mermaid-svg-sy5jU3tj3vX83reJ .sectionTitle3{fill:#333}#mermaid-svg-sy5jU3tj3vX83reJ .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-sy5jU3tj3vX83reJ .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-sy5jU3tj3vX83reJ .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-sy5jU3tj3vX83reJ .grid path{stroke-width:0}#mermaid-svg-sy5jU3tj3vX83reJ .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-sy5jU3tj3vX83reJ .task{stroke-width:2}#mermaid-svg-sy5jU3tj3vX83reJ .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-sy5jU3tj3vX83reJ .taskText:not([font-size]){font-size:11px}#mermaid-svg-sy5jU3tj3vX83reJ .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-sy5jU3tj3vX83reJ .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-sy5jU3tj3vX83reJ .task.clickable{cursor:pointer}#mermaid-svg-sy5jU3tj3vX83reJ .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-sy5jU3tj3vX83reJ .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-sy5jU3tj3vX83reJ .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-sy5jU3tj3vX83reJ .taskText0,#mermaid-svg-sy5jU3tj3vX83reJ .taskText1,#mermaid-svg-sy5jU3tj3vX83reJ .taskText2,#mermaid-svg-sy5jU3tj3vX83reJ .taskText3{fill:#fff}#mermaid-svg-sy5jU3tj3vX83reJ .task0,#mermaid-svg-sy5jU3tj3vX83reJ .task1,#mermaid-svg-sy5jU3tj3vX83reJ .task2,#mermaid-svg-sy5jU3tj3vX83reJ .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-sy5jU3tj3vX83reJ .taskTextOutside0,#mermaid-svg-sy5jU3tj3vX83reJ .taskTextOutside2{fill:#000}#mermaid-svg-sy5jU3tj3vX83reJ .taskTextOutside1,#mermaid-svg-sy5jU3tj3vX83reJ .taskTextOutside3{fill:#000}#mermaid-svg-sy5jU3tj3vX83reJ .active0,#mermaid-svg-sy5jU3tj3vX83reJ .active1,#mermaid-svg-sy5jU3tj3vX83reJ .active2,#mermaid-svg-sy5jU3tj3vX83reJ .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-sy5jU3tj3vX83reJ .activeText0,#mermaid-svg-sy5jU3tj3vX83reJ .activeText1,#mermaid-svg-sy5jU3tj3vX83reJ .activeText2,#mermaid-svg-sy5jU3tj3vX83reJ .activeText3{fill:#000 !important}#mermaid-svg-sy5jU3tj3vX83reJ .done0,#mermaid-svg-sy5jU3tj3vX83reJ .done1,#mermaid-svg-sy5jU3tj3vX83reJ .done2,#mermaid-svg-sy5jU3tj3vX83reJ .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-sy5jU3tj3vX83reJ .doneText0,#mermaid-svg-sy5jU3tj3vX83reJ .doneText1,#mermaid-svg-sy5jU3tj3vX83reJ .doneText2,#mermaid-svg-sy5jU3tj3vX83reJ .doneText3{fill:#000 !important}#mermaid-svg-sy5jU3tj3vX83reJ .crit0,#mermaid-svg-sy5jU3tj3vX83reJ .crit1,#mermaid-svg-sy5jU3tj3vX83reJ .crit2,#mermaid-svg-sy5jU3tj3vX83reJ .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-sy5jU3tj3vX83reJ .activeCrit0,#mermaid-svg-sy5jU3tj3vX83reJ .activeCrit1,#mermaid-svg-sy5jU3tj3vX83reJ .activeCrit2,#mermaid-svg-sy5jU3tj3vX83reJ .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-sy5jU3tj3vX83reJ .doneCrit0,#mermaid-svg-sy5jU3tj3vX83reJ .doneCrit1,#mermaid-svg-sy5jU3tj3vX83reJ .doneCrit2,#mermaid-svg-sy5jU3tj3vX83reJ .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-sy5jU3tj3vX83reJ .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-sy5jU3tj3vX83reJ .milestoneText{font-style:italic}#mermaid-svg-sy5jU3tj3vX83reJ .doneCritText0,#mermaid-svg-sy5jU3tj3vX83reJ .doneCritText1,#mermaid-svg-sy5jU3tj3vX83reJ .doneCritText2,#mermaid-svg-sy5jU3tj3vX83reJ .doneCritText3{fill:#000 !important}#mermaid-svg-sy5jU3tj3vX83reJ .activeCritText0,#mermaid-svg-sy5jU3tj3vX83reJ .activeCritText1,#mermaid-svg-sy5jU3tj3vX83reJ .activeCritText2,#mermaid-svg-sy5jU3tj3vX83reJ .activeCritText3{fill:#000 !important}#mermaid-svg-sy5jU3tj3vX83reJ .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-sy5jU3tj3vX83reJ g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-sy5jU3tj3vX83reJ g.classGroup text .title{font-weight:bolder}#mermaid-svg-sy5jU3tj3vX83reJ g.clickable{cursor:pointer}#mermaid-svg-sy5jU3tj3vX83reJ g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-sy5jU3tj3vX83reJ g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-sy5jU3tj3vX83reJ .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-sy5jU3tj3vX83reJ .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-sy5jU3tj3vX83reJ .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-sy5jU3tj3vX83reJ .dashed-line{stroke-dasharray:3}#mermaid-svg-sy5jU3tj3vX83reJ #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-sy5jU3tj3vX83reJ #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-sy5jU3tj3vX83reJ #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-sy5jU3tj3vX83reJ #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-sy5jU3tj3vX83reJ #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-sy5jU3tj3vX83reJ #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-sy5jU3tj3vX83reJ #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-sy5jU3tj3vX83reJ #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-sy5jU3tj3vX83reJ .commit-id,#mermaid-svg-sy5jU3tj3vX83reJ .commit-msg,#mermaid-svg-sy5jU3tj3vX83reJ .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-sy5jU3tj3vX83reJ .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-sy5jU3tj3vX83reJ .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-sy5jU3tj3vX83reJ g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-sy5jU3tj3vX83reJ g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-sy5jU3tj3vX83reJ g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-sy5jU3tj3vX83reJ g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-sy5jU3tj3vX83reJ g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-sy5jU3tj3vX83reJ g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-sy5jU3tj3vX83reJ .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-sy5jU3tj3vX83reJ .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-sy5jU3tj3vX83reJ .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-sy5jU3tj3vX83reJ .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-sy5jU3tj3vX83reJ .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-sy5jU3tj3vX83reJ .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-sy5jU3tj3vX83reJ .edgeLabel text{fill:#333}#mermaid-svg-sy5jU3tj3vX83reJ .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-sy5jU3tj3vX83reJ .node circle.state-start{fill:black;stroke:black}#mermaid-svg-sy5jU3tj3vX83reJ .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-sy5jU3tj3vX83reJ #statediagram-barbEnd{fill:#9370db}#mermaid-svg-sy5jU3tj3vX83reJ .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-sy5jU3tj3vX83reJ .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-sy5jU3tj3vX83reJ .statediagram-state .divider{stroke:#9370db}#mermaid-svg-sy5jU3tj3vX83reJ .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-sy5jU3tj3vX83reJ .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-sy5jU3tj3vX83reJ .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-sy5jU3tj3vX83reJ .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-sy5jU3tj3vX83reJ .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-sy5jU3tj3vX83reJ .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-sy5jU3tj3vX83reJ .note-edge{stroke-dasharray:5}#mermaid-svg-sy5jU3tj3vX83reJ .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-sy5jU3tj3vX83reJ .error-icon{fill:#522}#mermaid-svg-sy5jU3tj3vX83reJ .error-text{fill:#522;stroke:#522}#mermaid-svg-sy5jU3tj3vX83reJ .edge-thickness-normal{stroke-width:2px}#mermaid-svg-sy5jU3tj3vX83reJ .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-sy5jU3tj3vX83reJ .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-sy5jU3tj3vX83reJ .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-sy5jU3tj3vX83reJ .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-sy5jU3tj3vX83reJ .marker{fill:#333}#mermaid-svg-sy5jU3tj3vX83reJ .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-sy5jU3tj3vX83reJ {color: rgba(0, 0, 0, 0.75);font: ;}

E
a
b
A
c
d
B
c
d
A
c
d
B
c
d
I0:
S'->.E
E->.aA
E->.bB
I1:
S'->E.
I2:
E->a.A
A->.cA
E->.d
I3:
E->b.B
B->.cB
B->.d
I6:
E->aA.
I4:
A->c.A
A->.cA
A->.d
I10:
E->d.
I7
E->bB.
I5
B->c.B
B->.cB
B->.d
I11
B->d.
I8:
A->cA.
I9:
B->cB.

LR(0)分析表

  1. 移进项目:如A->α•aβ,圆点后面为终结符的项目为移进项目
  2. 待约项目:如A->α•Bβ,圆点后面为非终结符的项目为待约项目
  3. 归约项目:如A->α•,圆点在最右端的项目为归约项目
  4. 接受项目:如S’->α•,S’->α为拓广文法,S’为左部的产生式只有一个,因此为特殊的归约项目,为接受项目

ACTION 表项和 GOTO表项可按如下方法构造(lk表示FSM图中的状态,中可以0,1,2…):
若项目A ->α • aβ属于 Ik 且 GO (Ik, a)= Ij, 期望字符a 为终结符,则置ACTION[k, a] =sj(j表示新状态Ij);
若项目A ->α • Aβ属于Ik,且GO (Ik, A)= Ij,期望字符 A为非终结符,则置GOTO(k, A)=j (j表示文法中第j个产生式);
若项目A ->α •属于Ik, 那么对任何终结符a, 置ACTION[k, a]=rj;其中,假定A->α为文法G 的第j个产生式;
若项目S’ ->S • 属于Ik, 则置ACTION[k, #]为“acc”;
分析表中凡不能用上述规则填入信息的空白格均置上“出错标志”

状态 ACTION GOTO
a b c d # E A B
0 S2 S3 1
1 acc
2 S4 S10 6
3 S5 S11 7
4 S4 S10 8
5 S5 S11 9
6 r1 r1 r1 r1 r1
7 r2 r2 r2 r2 r2
8 r3 r3 r3 r3 r3
9 r5 r5 r5 r5 r5
10 r4 r4 r4 r4 r4
11 r6 r6 r6 r6 r6

文法 G 是 LR(0) 文法,当且仅当它的LR(0)FSM中的每个状态都满足:
①不同时含有移进项目和归约项目,即不存在移进-归约冲突。
②不含有两个以上归约项目,即不存在归约-归约冲突。

对输入串bccd#的分析过程

步骤 状态栈 符号栈 输入符串 ACTION GOTO
1 0 # bccd# S3
2 03 #b ccd# S5
3 035 #bc cd# S5
4 0355 #bcc d# S11
5 0355(11) #bccd # r6 9
6 03559 #bccB # r5 9
7 0359 #bcB # r5 7
8 037 #bB # r2 1
9 01 #E # acc

碰到r的时候,状态栈出栈【r式子右部长度】然后根据符号栈入栈【r式子左边字符】

SLR(1)分析

LR(0)文法不能有移进-归约冲突及归约-归约冲突的限制。大多程序设计的时候不能满足。为了解决冲突,我们当冲突发生的时候向前查看一个符号,以确定哪个动作,这种分析方法为简单的LR(1),称为SLR(1).

详情(略)…

LR(1)分析

SLR(1)分析法只是简单地考察下一个输入符号a是否属于归约项目A→α相关联的FOLLOW(A),就采用产生式A->α归约,但 a∈FOLLOW(A) 只是归约的一个必要条件,而非充分条件。如果栈里的符号串是βα,归约成βA,再移当前符a,栈里变为βAa,而实际上βAa不一定是文件的活前缀。

A→α规约栈顶的符号α时,不仅应该查看栈中符号串δα,还应向前扫视一个输入符号a,只有当δAa确实构成文法某一规范句型的前缀时,才能用此规则进行规约。

给定文法G[S’]:
S’->S
S->aAd
S->bAc
S->aec
S->bed
A->e

LR(1)项目集族的构造

以S′→·S,#属于初始项目集中,把’#‘号作为向前搜索符,表示活前缀为γ(若γ是有关S产生式的某一右部)要归约成S时,必须面临输入符为’#'号才行。我们对初始项目S′→·S,# 求闭包后再用转换函数逐步求出整个文法的LR(1)项目集族。具体构造步骤如下:
a)假定I是一个项目集, I 的任何项目都属于CLOSURE(I)。
b) 若有项目 A→α·Bβ,a属于CLOSURE(I),B→γ是文法中的产生式,β∈V*,b∈FIRST(βa), 则 B→·γ,b 也属于CLOSURE(I)中。
c) 重复b)直到CLOSURE(I)不再增大为止。

1.我们对初始项目S′→·S,#

#mermaid-svg-LgBi5e8FHVYIksIS .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-LgBi5e8FHVYIksIS .label text{fill:#333}#mermaid-svg-LgBi5e8FHVYIksIS .node rect,#mermaid-svg-LgBi5e8FHVYIksIS .node circle,#mermaid-svg-LgBi5e8FHVYIksIS .node ellipse,#mermaid-svg-LgBi5e8FHVYIksIS .node polygon,#mermaid-svg-LgBi5e8FHVYIksIS .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-LgBi5e8FHVYIksIS .node .label{text-align:center;fill:#333}#mermaid-svg-LgBi5e8FHVYIksIS .node.clickable{cursor:pointer}#mermaid-svg-LgBi5e8FHVYIksIS .arrowheadPath{fill:#333}#mermaid-svg-LgBi5e8FHVYIksIS .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-LgBi5e8FHVYIksIS .flowchart-link{stroke:#333;fill:none}#mermaid-svg-LgBi5e8FHVYIksIS .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-LgBi5e8FHVYIksIS .edgeLabel rect{opacity:0.9}#mermaid-svg-LgBi5e8FHVYIksIS .edgeLabel span{color:#333}#mermaid-svg-LgBi5e8FHVYIksIS .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-LgBi5e8FHVYIksIS .cluster text{fill:#333}#mermaid-svg-LgBi5e8FHVYIksIS div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-LgBi5e8FHVYIksIS .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-LgBi5e8FHVYIksIS text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-LgBi5e8FHVYIksIS .actor-line{stroke:grey}#mermaid-svg-LgBi5e8FHVYIksIS .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-LgBi5e8FHVYIksIS .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-LgBi5e8FHVYIksIS #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-LgBi5e8FHVYIksIS .sequenceNumber{fill:#fff}#mermaid-svg-LgBi5e8FHVYIksIS #sequencenumber{fill:#333}#mermaid-svg-LgBi5e8FHVYIksIS #crosshead path{fill:#333;stroke:#333}#mermaid-svg-LgBi5e8FHVYIksIS .messageText{fill:#333;stroke:#333}#mermaid-svg-LgBi5e8FHVYIksIS .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-LgBi5e8FHVYIksIS .labelText,#mermaid-svg-LgBi5e8FHVYIksIS .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-LgBi5e8FHVYIksIS .loopText,#mermaid-svg-LgBi5e8FHVYIksIS .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-LgBi5e8FHVYIksIS .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-LgBi5e8FHVYIksIS .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-LgBi5e8FHVYIksIS .noteText,#mermaid-svg-LgBi5e8FHVYIksIS .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-LgBi5e8FHVYIksIS .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-LgBi5e8FHVYIksIS .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-LgBi5e8FHVYIksIS .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-LgBi5e8FHVYIksIS .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-LgBi5e8FHVYIksIS .section{stroke:none;opacity:0.2}#mermaid-svg-LgBi5e8FHVYIksIS .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-LgBi5e8FHVYIksIS .section2{fill:#fff400}#mermaid-svg-LgBi5e8FHVYIksIS .section1,#mermaid-svg-LgBi5e8FHVYIksIS .section3{fill:#fff;opacity:0.2}#mermaid-svg-LgBi5e8FHVYIksIS .sectionTitle0{fill:#333}#mermaid-svg-LgBi5e8FHVYIksIS .sectionTitle1{fill:#333}#mermaid-svg-LgBi5e8FHVYIksIS .sectionTitle2{fill:#333}#mermaid-svg-LgBi5e8FHVYIksIS .sectionTitle3{fill:#333}#mermaid-svg-LgBi5e8FHVYIksIS .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-LgBi5e8FHVYIksIS .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-LgBi5e8FHVYIksIS .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-LgBi5e8FHVYIksIS .grid path{stroke-width:0}#mermaid-svg-LgBi5e8FHVYIksIS .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-LgBi5e8FHVYIksIS .task{stroke-width:2}#mermaid-svg-LgBi5e8FHVYIksIS .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-LgBi5e8FHVYIksIS .taskText:not([font-size]){font-size:11px}#mermaid-svg-LgBi5e8FHVYIksIS .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-LgBi5e8FHVYIksIS .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-LgBi5e8FHVYIksIS .task.clickable{cursor:pointer}#mermaid-svg-LgBi5e8FHVYIksIS .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-LgBi5e8FHVYIksIS .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-LgBi5e8FHVYIksIS .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-LgBi5e8FHVYIksIS .taskText0,#mermaid-svg-LgBi5e8FHVYIksIS .taskText1,#mermaid-svg-LgBi5e8FHVYIksIS .taskText2,#mermaid-svg-LgBi5e8FHVYIksIS .taskText3{fill:#fff}#mermaid-svg-LgBi5e8FHVYIksIS .task0,#mermaid-svg-LgBi5e8FHVYIksIS .task1,#mermaid-svg-LgBi5e8FHVYIksIS .task2,#mermaid-svg-LgBi5e8FHVYIksIS .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-LgBi5e8FHVYIksIS .taskTextOutside0,#mermaid-svg-LgBi5e8FHVYIksIS .taskTextOutside2{fill:#000}#mermaid-svg-LgBi5e8FHVYIksIS .taskTextOutside1,#mermaid-svg-LgBi5e8FHVYIksIS .taskTextOutside3{fill:#000}#mermaid-svg-LgBi5e8FHVYIksIS .active0,#mermaid-svg-LgBi5e8FHVYIksIS .active1,#mermaid-svg-LgBi5e8FHVYIksIS .active2,#mermaid-svg-LgBi5e8FHVYIksIS .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-LgBi5e8FHVYIksIS .activeText0,#mermaid-svg-LgBi5e8FHVYIksIS .activeText1,#mermaid-svg-LgBi5e8FHVYIksIS .activeText2,#mermaid-svg-LgBi5e8FHVYIksIS .activeText3{fill:#000 !important}#mermaid-svg-LgBi5e8FHVYIksIS .done0,#mermaid-svg-LgBi5e8FHVYIksIS .done1,#mermaid-svg-LgBi5e8FHVYIksIS .done2,#mermaid-svg-LgBi5e8FHVYIksIS .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-LgBi5e8FHVYIksIS .doneText0,#mermaid-svg-LgBi5e8FHVYIksIS .doneText1,#mermaid-svg-LgBi5e8FHVYIksIS .doneText2,#mermaid-svg-LgBi5e8FHVYIksIS .doneText3{fill:#000 !important}#mermaid-svg-LgBi5e8FHVYIksIS .crit0,#mermaid-svg-LgBi5e8FHVYIksIS .crit1,#mermaid-svg-LgBi5e8FHVYIksIS .crit2,#mermaid-svg-LgBi5e8FHVYIksIS .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-LgBi5e8FHVYIksIS .activeCrit0,#mermaid-svg-LgBi5e8FHVYIksIS .activeCrit1,#mermaid-svg-LgBi5e8FHVYIksIS .activeCrit2,#mermaid-svg-LgBi5e8FHVYIksIS .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-LgBi5e8FHVYIksIS .doneCrit0,#mermaid-svg-LgBi5e8FHVYIksIS .doneCrit1,#mermaid-svg-LgBi5e8FHVYIksIS .doneCrit2,#mermaid-svg-LgBi5e8FHVYIksIS .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-LgBi5e8FHVYIksIS .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-LgBi5e8FHVYIksIS .milestoneText{font-style:italic}#mermaid-svg-LgBi5e8FHVYIksIS .doneCritText0,#mermaid-svg-LgBi5e8FHVYIksIS .doneCritText1,#mermaid-svg-LgBi5e8FHVYIksIS .doneCritText2,#mermaid-svg-LgBi5e8FHVYIksIS .doneCritText3{fill:#000 !important}#mermaid-svg-LgBi5e8FHVYIksIS .activeCritText0,#mermaid-svg-LgBi5e8FHVYIksIS .activeCritText1,#mermaid-svg-LgBi5e8FHVYIksIS .activeCritText2,#mermaid-svg-LgBi5e8FHVYIksIS .activeCritText3{fill:#000 !important}#mermaid-svg-LgBi5e8FHVYIksIS .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-LgBi5e8FHVYIksIS g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-LgBi5e8FHVYIksIS g.classGroup text .title{font-weight:bolder}#mermaid-svg-LgBi5e8FHVYIksIS g.clickable{cursor:pointer}#mermaid-svg-LgBi5e8FHVYIksIS g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-LgBi5e8FHVYIksIS g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-LgBi5e8FHVYIksIS .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-LgBi5e8FHVYIksIS .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-LgBi5e8FHVYIksIS .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-LgBi5e8FHVYIksIS .dashed-line{stroke-dasharray:3}#mermaid-svg-LgBi5e8FHVYIksIS #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-LgBi5e8FHVYIksIS #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-LgBi5e8FHVYIksIS #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-LgBi5e8FHVYIksIS #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-LgBi5e8FHVYIksIS #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-LgBi5e8FHVYIksIS #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-LgBi5e8FHVYIksIS #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-LgBi5e8FHVYIksIS #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-LgBi5e8FHVYIksIS .commit-id,#mermaid-svg-LgBi5e8FHVYIksIS .commit-msg,#mermaid-svg-LgBi5e8FHVYIksIS .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-LgBi5e8FHVYIksIS .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-LgBi5e8FHVYIksIS .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-LgBi5e8FHVYIksIS g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-LgBi5e8FHVYIksIS g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-LgBi5e8FHVYIksIS g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-LgBi5e8FHVYIksIS g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-LgBi5e8FHVYIksIS g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-LgBi5e8FHVYIksIS g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-LgBi5e8FHVYIksIS .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-LgBi5e8FHVYIksIS .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-LgBi5e8FHVYIksIS .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-LgBi5e8FHVYIksIS .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-LgBi5e8FHVYIksIS .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-LgBi5e8FHVYIksIS .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-LgBi5e8FHVYIksIS .edgeLabel text{fill:#333}#mermaid-svg-LgBi5e8FHVYIksIS .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-LgBi5e8FHVYIksIS .node circle.state-start{fill:black;stroke:black}#mermaid-svg-LgBi5e8FHVYIksIS .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-LgBi5e8FHVYIksIS #statediagram-barbEnd{fill:#9370db}#mermaid-svg-LgBi5e8FHVYIksIS .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-LgBi5e8FHVYIksIS .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-LgBi5e8FHVYIksIS .statediagram-state .divider{stroke:#9370db}#mermaid-svg-LgBi5e8FHVYIksIS .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-LgBi5e8FHVYIksIS .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-LgBi5e8FHVYIksIS .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-LgBi5e8FHVYIksIS .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-LgBi5e8FHVYIksIS .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-LgBi5e8FHVYIksIS .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-LgBi5e8FHVYIksIS .note-edge{stroke-dasharray:5}#mermaid-svg-LgBi5e8FHVYIksIS .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-LgBi5e8FHVYIksIS .error-icon{fill:#522}#mermaid-svg-LgBi5e8FHVYIksIS .error-text{fill:#522;stroke:#522}#mermaid-svg-LgBi5e8FHVYIksIS .edge-thickness-normal{stroke-width:2px}#mermaid-svg-LgBi5e8FHVYIksIS .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-LgBi5e8FHVYIksIS .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-LgBi5e8FHVYIksIS .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-LgBi5e8FHVYIksIS .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-LgBi5e8FHVYIksIS .marker{fill:#333}#mermaid-svg-LgBi5e8FHVYIksIS .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-LgBi5e8FHVYIksIS {color: rgba(0, 0, 0, 0.75);font: ;}

I0:
S'->S,#

2.活前缀为γ(若γ是有关S产生式的某一右部)要归约成S时,必须面临输入符为’#'号才行

#mermaid-svg-JDlSvaeomBcxiSFm .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-JDlSvaeomBcxiSFm .label text{fill:#333}#mermaid-svg-JDlSvaeomBcxiSFm .node rect,#mermaid-svg-JDlSvaeomBcxiSFm .node circle,#mermaid-svg-JDlSvaeomBcxiSFm .node ellipse,#mermaid-svg-JDlSvaeomBcxiSFm .node polygon,#mermaid-svg-JDlSvaeomBcxiSFm .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-JDlSvaeomBcxiSFm .node .label{text-align:center;fill:#333}#mermaid-svg-JDlSvaeomBcxiSFm .node.clickable{cursor:pointer}#mermaid-svg-JDlSvaeomBcxiSFm .arrowheadPath{fill:#333}#mermaid-svg-JDlSvaeomBcxiSFm .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-JDlSvaeomBcxiSFm .flowchart-link{stroke:#333;fill:none}#mermaid-svg-JDlSvaeomBcxiSFm .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-JDlSvaeomBcxiSFm .edgeLabel rect{opacity:0.9}#mermaid-svg-JDlSvaeomBcxiSFm .edgeLabel span{color:#333}#mermaid-svg-JDlSvaeomBcxiSFm .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-JDlSvaeomBcxiSFm .cluster text{fill:#333}#mermaid-svg-JDlSvaeomBcxiSFm div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-JDlSvaeomBcxiSFm .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-JDlSvaeomBcxiSFm text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-JDlSvaeomBcxiSFm .actor-line{stroke:grey}#mermaid-svg-JDlSvaeomBcxiSFm .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-JDlSvaeomBcxiSFm .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-JDlSvaeomBcxiSFm #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-JDlSvaeomBcxiSFm .sequenceNumber{fill:#fff}#mermaid-svg-JDlSvaeomBcxiSFm #sequencenumber{fill:#333}#mermaid-svg-JDlSvaeomBcxiSFm #crosshead path{fill:#333;stroke:#333}#mermaid-svg-JDlSvaeomBcxiSFm .messageText{fill:#333;stroke:#333}#mermaid-svg-JDlSvaeomBcxiSFm .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-JDlSvaeomBcxiSFm .labelText,#mermaid-svg-JDlSvaeomBcxiSFm .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-JDlSvaeomBcxiSFm .loopText,#mermaid-svg-JDlSvaeomBcxiSFm .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-JDlSvaeomBcxiSFm .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-JDlSvaeomBcxiSFm .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-JDlSvaeomBcxiSFm .noteText,#mermaid-svg-JDlSvaeomBcxiSFm .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-JDlSvaeomBcxiSFm .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-JDlSvaeomBcxiSFm .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-JDlSvaeomBcxiSFm .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-JDlSvaeomBcxiSFm .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-JDlSvaeomBcxiSFm .section{stroke:none;opacity:0.2}#mermaid-svg-JDlSvaeomBcxiSFm .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-JDlSvaeomBcxiSFm .section2{fill:#fff400}#mermaid-svg-JDlSvaeomBcxiSFm .section1,#mermaid-svg-JDlSvaeomBcxiSFm .section3{fill:#fff;opacity:0.2}#mermaid-svg-JDlSvaeomBcxiSFm .sectionTitle0{fill:#333}#mermaid-svg-JDlSvaeomBcxiSFm .sectionTitle1{fill:#333}#mermaid-svg-JDlSvaeomBcxiSFm .sectionTitle2{fill:#333}#mermaid-svg-JDlSvaeomBcxiSFm .sectionTitle3{fill:#333}#mermaid-svg-JDlSvaeomBcxiSFm .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-JDlSvaeomBcxiSFm .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-JDlSvaeomBcxiSFm .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-JDlSvaeomBcxiSFm .grid path{stroke-width:0}#mermaid-svg-JDlSvaeomBcxiSFm .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-JDlSvaeomBcxiSFm .task{stroke-width:2}#mermaid-svg-JDlSvaeomBcxiSFm .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-JDlSvaeomBcxiSFm .taskText:not([font-size]){font-size:11px}#mermaid-svg-JDlSvaeomBcxiSFm .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-JDlSvaeomBcxiSFm .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-JDlSvaeomBcxiSFm .task.clickable{cursor:pointer}#mermaid-svg-JDlSvaeomBcxiSFm .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-JDlSvaeomBcxiSFm .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-JDlSvaeomBcxiSFm .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-JDlSvaeomBcxiSFm .taskText0,#mermaid-svg-JDlSvaeomBcxiSFm .taskText1,#mermaid-svg-JDlSvaeomBcxiSFm .taskText2,#mermaid-svg-JDlSvaeomBcxiSFm .taskText3{fill:#fff}#mermaid-svg-JDlSvaeomBcxiSFm .task0,#mermaid-svg-JDlSvaeomBcxiSFm .task1,#mermaid-svg-JDlSvaeomBcxiSFm .task2,#mermaid-svg-JDlSvaeomBcxiSFm .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-JDlSvaeomBcxiSFm .taskTextOutside0,#mermaid-svg-JDlSvaeomBcxiSFm .taskTextOutside2{fill:#000}#mermaid-svg-JDlSvaeomBcxiSFm .taskTextOutside1,#mermaid-svg-JDlSvaeomBcxiSFm .taskTextOutside3{fill:#000}#mermaid-svg-JDlSvaeomBcxiSFm .active0,#mermaid-svg-JDlSvaeomBcxiSFm .active1,#mermaid-svg-JDlSvaeomBcxiSFm .active2,#mermaid-svg-JDlSvaeomBcxiSFm .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-JDlSvaeomBcxiSFm .activeText0,#mermaid-svg-JDlSvaeomBcxiSFm .activeText1,#mermaid-svg-JDlSvaeomBcxiSFm .activeText2,#mermaid-svg-JDlSvaeomBcxiSFm .activeText3{fill:#000 !important}#mermaid-svg-JDlSvaeomBcxiSFm .done0,#mermaid-svg-JDlSvaeomBcxiSFm .done1,#mermaid-svg-JDlSvaeomBcxiSFm .done2,#mermaid-svg-JDlSvaeomBcxiSFm .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-JDlSvaeomBcxiSFm .doneText0,#mermaid-svg-JDlSvaeomBcxiSFm .doneText1,#mermaid-svg-JDlSvaeomBcxiSFm .doneText2,#mermaid-svg-JDlSvaeomBcxiSFm .doneText3{fill:#000 !important}#mermaid-svg-JDlSvaeomBcxiSFm .crit0,#mermaid-svg-JDlSvaeomBcxiSFm .crit1,#mermaid-svg-JDlSvaeomBcxiSFm .crit2,#mermaid-svg-JDlSvaeomBcxiSFm .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-JDlSvaeomBcxiSFm .activeCrit0,#mermaid-svg-JDlSvaeomBcxiSFm .activeCrit1,#mermaid-svg-JDlSvaeomBcxiSFm .activeCrit2,#mermaid-svg-JDlSvaeomBcxiSFm .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-JDlSvaeomBcxiSFm .doneCrit0,#mermaid-svg-JDlSvaeomBcxiSFm .doneCrit1,#mermaid-svg-JDlSvaeomBcxiSFm .doneCrit2,#mermaid-svg-JDlSvaeomBcxiSFm .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-JDlSvaeomBcxiSFm .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-JDlSvaeomBcxiSFm .milestoneText{font-style:italic}#mermaid-svg-JDlSvaeomBcxiSFm .doneCritText0,#mermaid-svg-JDlSvaeomBcxiSFm .doneCritText1,#mermaid-svg-JDlSvaeomBcxiSFm .doneCritText2,#mermaid-svg-JDlSvaeomBcxiSFm .doneCritText3{fill:#000 !important}#mermaid-svg-JDlSvaeomBcxiSFm .activeCritText0,#mermaid-svg-JDlSvaeomBcxiSFm .activeCritText1,#mermaid-svg-JDlSvaeomBcxiSFm .activeCritText2,#mermaid-svg-JDlSvaeomBcxiSFm .activeCritText3{fill:#000 !important}#mermaid-svg-JDlSvaeomBcxiSFm .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-JDlSvaeomBcxiSFm g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-JDlSvaeomBcxiSFm g.classGroup text .title{font-weight:bolder}#mermaid-svg-JDlSvaeomBcxiSFm g.clickable{cursor:pointer}#mermaid-svg-JDlSvaeomBcxiSFm g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-JDlSvaeomBcxiSFm g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-JDlSvaeomBcxiSFm .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-JDlSvaeomBcxiSFm .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-JDlSvaeomBcxiSFm .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-JDlSvaeomBcxiSFm .dashed-line{stroke-dasharray:3}#mermaid-svg-JDlSvaeomBcxiSFm #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-JDlSvaeomBcxiSFm #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-JDlSvaeomBcxiSFm #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-JDlSvaeomBcxiSFm #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-JDlSvaeomBcxiSFm #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-JDlSvaeomBcxiSFm #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-JDlSvaeomBcxiSFm #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-JDlSvaeomBcxiSFm #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-JDlSvaeomBcxiSFm .commit-id,#mermaid-svg-JDlSvaeomBcxiSFm .commit-msg,#mermaid-svg-JDlSvaeomBcxiSFm .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-JDlSvaeomBcxiSFm .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-JDlSvaeomBcxiSFm .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-JDlSvaeomBcxiSFm g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-JDlSvaeomBcxiSFm g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-JDlSvaeomBcxiSFm g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-JDlSvaeomBcxiSFm g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-JDlSvaeomBcxiSFm g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-JDlSvaeomBcxiSFm g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-JDlSvaeomBcxiSFm .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-JDlSvaeomBcxiSFm .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-JDlSvaeomBcxiSFm .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-JDlSvaeomBcxiSFm .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-JDlSvaeomBcxiSFm .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-JDlSvaeomBcxiSFm .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-JDlSvaeomBcxiSFm .edgeLabel text{fill:#333}#mermaid-svg-JDlSvaeomBcxiSFm .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-JDlSvaeomBcxiSFm .node circle.state-start{fill:black;stroke:black}#mermaid-svg-JDlSvaeomBcxiSFm .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-JDlSvaeomBcxiSFm #statediagram-barbEnd{fill:#9370db}#mermaid-svg-JDlSvaeomBcxiSFm .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-JDlSvaeomBcxiSFm .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-JDlSvaeomBcxiSFm .statediagram-state .divider{stroke:#9370db}#mermaid-svg-JDlSvaeomBcxiSFm .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-JDlSvaeomBcxiSFm .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-JDlSvaeomBcxiSFm .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-JDlSvaeomBcxiSFm .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-JDlSvaeomBcxiSFm .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-JDlSvaeomBcxiSFm .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-JDlSvaeomBcxiSFm .note-edge{stroke-dasharray:5}#mermaid-svg-JDlSvaeomBcxiSFm .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-JDlSvaeomBcxiSFm .error-icon{fill:#522}#mermaid-svg-JDlSvaeomBcxiSFm .error-text{fill:#522;stroke:#522}#mermaid-svg-JDlSvaeomBcxiSFm .edge-thickness-normal{stroke-width:2px}#mermaid-svg-JDlSvaeomBcxiSFm .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-JDlSvaeomBcxiSFm .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-JDlSvaeomBcxiSFm .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-JDlSvaeomBcxiSFm .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-JDlSvaeomBcxiSFm .marker{fill:#333}#mermaid-svg-JDlSvaeomBcxiSFm .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-JDlSvaeomBcxiSFm {color: rgba(0, 0, 0, 0.75);font: ;}

I0:
S'->S,#
S->.aAd,#
S->.bAc,#
S->.aec,#
S->.bed,#

3.go(I0,a)
若有项目 S->a.Ad,#属于I2,A→e是文法中的产生式,{d}∈V*,d∈FIRST({d#}), 则 A→·e,d 也属于I2中

#mermaid-svg-vhE0KWMCE0KhqTAy .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-vhE0KWMCE0KhqTAy .label text{fill:#333}#mermaid-svg-vhE0KWMCE0KhqTAy .node rect,#mermaid-svg-vhE0KWMCE0KhqTAy .node circle,#mermaid-svg-vhE0KWMCE0KhqTAy .node ellipse,#mermaid-svg-vhE0KWMCE0KhqTAy .node polygon,#mermaid-svg-vhE0KWMCE0KhqTAy .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-vhE0KWMCE0KhqTAy .node .label{text-align:center;fill:#333}#mermaid-svg-vhE0KWMCE0KhqTAy .node.clickable{cursor:pointer}#mermaid-svg-vhE0KWMCE0KhqTAy .arrowheadPath{fill:#333}#mermaid-svg-vhE0KWMCE0KhqTAy .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-vhE0KWMCE0KhqTAy .flowchart-link{stroke:#333;fill:none}#mermaid-svg-vhE0KWMCE0KhqTAy .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-vhE0KWMCE0KhqTAy .edgeLabel rect{opacity:0.9}#mermaid-svg-vhE0KWMCE0KhqTAy .edgeLabel span{color:#333}#mermaid-svg-vhE0KWMCE0KhqTAy .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-vhE0KWMCE0KhqTAy .cluster text{fill:#333}#mermaid-svg-vhE0KWMCE0KhqTAy div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-vhE0KWMCE0KhqTAy .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-vhE0KWMCE0KhqTAy text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-vhE0KWMCE0KhqTAy .actor-line{stroke:grey}#mermaid-svg-vhE0KWMCE0KhqTAy .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-vhE0KWMCE0KhqTAy .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-vhE0KWMCE0KhqTAy #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-vhE0KWMCE0KhqTAy .sequenceNumber{fill:#fff}#mermaid-svg-vhE0KWMCE0KhqTAy #sequencenumber{fill:#333}#mermaid-svg-vhE0KWMCE0KhqTAy #crosshead path{fill:#333;stroke:#333}#mermaid-svg-vhE0KWMCE0KhqTAy .messageText{fill:#333;stroke:#333}#mermaid-svg-vhE0KWMCE0KhqTAy .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-vhE0KWMCE0KhqTAy .labelText,#mermaid-svg-vhE0KWMCE0KhqTAy .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-vhE0KWMCE0KhqTAy .loopText,#mermaid-svg-vhE0KWMCE0KhqTAy .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-vhE0KWMCE0KhqTAy .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-vhE0KWMCE0KhqTAy .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-vhE0KWMCE0KhqTAy .noteText,#mermaid-svg-vhE0KWMCE0KhqTAy .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-vhE0KWMCE0KhqTAy .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-vhE0KWMCE0KhqTAy .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-vhE0KWMCE0KhqTAy .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-vhE0KWMCE0KhqTAy .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-vhE0KWMCE0KhqTAy .section{stroke:none;opacity:0.2}#mermaid-svg-vhE0KWMCE0KhqTAy .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-vhE0KWMCE0KhqTAy .section2{fill:#fff400}#mermaid-svg-vhE0KWMCE0KhqTAy .section1,#mermaid-svg-vhE0KWMCE0KhqTAy .section3{fill:#fff;opacity:0.2}#mermaid-svg-vhE0KWMCE0KhqTAy .sectionTitle0{fill:#333}#mermaid-svg-vhE0KWMCE0KhqTAy .sectionTitle1{fill:#333}#mermaid-svg-vhE0KWMCE0KhqTAy .sectionTitle2{fill:#333}#mermaid-svg-vhE0KWMCE0KhqTAy .sectionTitle3{fill:#333}#mermaid-svg-vhE0KWMCE0KhqTAy .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-vhE0KWMCE0KhqTAy .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-vhE0KWMCE0KhqTAy .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-vhE0KWMCE0KhqTAy .grid path{stroke-width:0}#mermaid-svg-vhE0KWMCE0KhqTAy .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-vhE0KWMCE0KhqTAy .task{stroke-width:2}#mermaid-svg-vhE0KWMCE0KhqTAy .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-vhE0KWMCE0KhqTAy .taskText:not([font-size]){font-size:11px}#mermaid-svg-vhE0KWMCE0KhqTAy .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-vhE0KWMCE0KhqTAy .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-vhE0KWMCE0KhqTAy .task.clickable{cursor:pointer}#mermaid-svg-vhE0KWMCE0KhqTAy .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-vhE0KWMCE0KhqTAy .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-vhE0KWMCE0KhqTAy .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-vhE0KWMCE0KhqTAy .taskText0,#mermaid-svg-vhE0KWMCE0KhqTAy .taskText1,#mermaid-svg-vhE0KWMCE0KhqTAy .taskText2,#mermaid-svg-vhE0KWMCE0KhqTAy .taskText3{fill:#fff}#mermaid-svg-vhE0KWMCE0KhqTAy .task0,#mermaid-svg-vhE0KWMCE0KhqTAy .task1,#mermaid-svg-vhE0KWMCE0KhqTAy .task2,#mermaid-svg-vhE0KWMCE0KhqTAy .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-vhE0KWMCE0KhqTAy .taskTextOutside0,#mermaid-svg-vhE0KWMCE0KhqTAy .taskTextOutside2{fill:#000}#mermaid-svg-vhE0KWMCE0KhqTAy .taskTextOutside1,#mermaid-svg-vhE0KWMCE0KhqTAy .taskTextOutside3{fill:#000}#mermaid-svg-vhE0KWMCE0KhqTAy .active0,#mermaid-svg-vhE0KWMCE0KhqTAy .active1,#mermaid-svg-vhE0KWMCE0KhqTAy .active2,#mermaid-svg-vhE0KWMCE0KhqTAy .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-vhE0KWMCE0KhqTAy .activeText0,#mermaid-svg-vhE0KWMCE0KhqTAy .activeText1,#mermaid-svg-vhE0KWMCE0KhqTAy .activeText2,#mermaid-svg-vhE0KWMCE0KhqTAy .activeText3{fill:#000 !important}#mermaid-svg-vhE0KWMCE0KhqTAy .done0,#mermaid-svg-vhE0KWMCE0KhqTAy .done1,#mermaid-svg-vhE0KWMCE0KhqTAy .done2,#mermaid-svg-vhE0KWMCE0KhqTAy .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-vhE0KWMCE0KhqTAy .doneText0,#mermaid-svg-vhE0KWMCE0KhqTAy .doneText1,#mermaid-svg-vhE0KWMCE0KhqTAy .doneText2,#mermaid-svg-vhE0KWMCE0KhqTAy .doneText3{fill:#000 !important}#mermaid-svg-vhE0KWMCE0KhqTAy .crit0,#mermaid-svg-vhE0KWMCE0KhqTAy .crit1,#mermaid-svg-vhE0KWMCE0KhqTAy .crit2,#mermaid-svg-vhE0KWMCE0KhqTAy .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-vhE0KWMCE0KhqTAy .activeCrit0,#mermaid-svg-vhE0KWMCE0KhqTAy .activeCrit1,#mermaid-svg-vhE0KWMCE0KhqTAy .activeCrit2,#mermaid-svg-vhE0KWMCE0KhqTAy .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-vhE0KWMCE0KhqTAy .doneCrit0,#mermaid-svg-vhE0KWMCE0KhqTAy .doneCrit1,#mermaid-svg-vhE0KWMCE0KhqTAy .doneCrit2,#mermaid-svg-vhE0KWMCE0KhqTAy .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-vhE0KWMCE0KhqTAy .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-vhE0KWMCE0KhqTAy .milestoneText{font-style:italic}#mermaid-svg-vhE0KWMCE0KhqTAy .doneCritText0,#mermaid-svg-vhE0KWMCE0KhqTAy .doneCritText1,#mermaid-svg-vhE0KWMCE0KhqTAy .doneCritText2,#mermaid-svg-vhE0KWMCE0KhqTAy .doneCritText3{fill:#000 !important}#mermaid-svg-vhE0KWMCE0KhqTAy .activeCritText0,#mermaid-svg-vhE0KWMCE0KhqTAy .activeCritText1,#mermaid-svg-vhE0KWMCE0KhqTAy .activeCritText2,#mermaid-svg-vhE0KWMCE0KhqTAy .activeCritText3{fill:#000 !important}#mermaid-svg-vhE0KWMCE0KhqTAy .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-vhE0KWMCE0KhqTAy g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-vhE0KWMCE0KhqTAy g.classGroup text .title{font-weight:bolder}#mermaid-svg-vhE0KWMCE0KhqTAy g.clickable{cursor:pointer}#mermaid-svg-vhE0KWMCE0KhqTAy g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-vhE0KWMCE0KhqTAy g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-vhE0KWMCE0KhqTAy .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-vhE0KWMCE0KhqTAy .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-vhE0KWMCE0KhqTAy .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-vhE0KWMCE0KhqTAy .dashed-line{stroke-dasharray:3}#mermaid-svg-vhE0KWMCE0KhqTAy #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-vhE0KWMCE0KhqTAy #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-vhE0KWMCE0KhqTAy #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-vhE0KWMCE0KhqTAy #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-vhE0KWMCE0KhqTAy #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-vhE0KWMCE0KhqTAy #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-vhE0KWMCE0KhqTAy #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-vhE0KWMCE0KhqTAy #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-vhE0KWMCE0KhqTAy .commit-id,#mermaid-svg-vhE0KWMCE0KhqTAy .commit-msg,#mermaid-svg-vhE0KWMCE0KhqTAy .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-vhE0KWMCE0KhqTAy .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-vhE0KWMCE0KhqTAy .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-vhE0KWMCE0KhqTAy g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-vhE0KWMCE0KhqTAy g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-vhE0KWMCE0KhqTAy g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-vhE0KWMCE0KhqTAy g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-vhE0KWMCE0KhqTAy g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-vhE0KWMCE0KhqTAy g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-vhE0KWMCE0KhqTAy .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-vhE0KWMCE0KhqTAy .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-vhE0KWMCE0KhqTAy .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-vhE0KWMCE0KhqTAy .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-vhE0KWMCE0KhqTAy .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-vhE0KWMCE0KhqTAy .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-vhE0KWMCE0KhqTAy .edgeLabel text{fill:#333}#mermaid-svg-vhE0KWMCE0KhqTAy .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-vhE0KWMCE0KhqTAy .node circle.state-start{fill:black;stroke:black}#mermaid-svg-vhE0KWMCE0KhqTAy .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-vhE0KWMCE0KhqTAy #statediagram-barbEnd{fill:#9370db}#mermaid-svg-vhE0KWMCE0KhqTAy .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-vhE0KWMCE0KhqTAy .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-vhE0KWMCE0KhqTAy .statediagram-state .divider{stroke:#9370db}#mermaid-svg-vhE0KWMCE0KhqTAy .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-vhE0KWMCE0KhqTAy .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-vhE0KWMCE0KhqTAy .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-vhE0KWMCE0KhqTAy .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-vhE0KWMCE0KhqTAy .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-vhE0KWMCE0KhqTAy .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-vhE0KWMCE0KhqTAy .note-edge{stroke-dasharray:5}#mermaid-svg-vhE0KWMCE0KhqTAy .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-vhE0KWMCE0KhqTAy .error-icon{fill:#522}#mermaid-svg-vhE0KWMCE0KhqTAy .error-text{fill:#522;stroke:#522}#mermaid-svg-vhE0KWMCE0KhqTAy .edge-thickness-normal{stroke-width:2px}#mermaid-svg-vhE0KWMCE0KhqTAy .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-vhE0KWMCE0KhqTAy .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-vhE0KWMCE0KhqTAy .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-vhE0KWMCE0KhqTAy .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-vhE0KWMCE0KhqTAy .marker{fill:#333}#mermaid-svg-vhE0KWMCE0KhqTAy .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-vhE0KWMCE0KhqTAy {color: rgba(0, 0, 0, 0.75);font: ;}

S
a
I0:
S'->.S,#
S->.aAd,#
S->.bAc,#
S->.aec,#
S->.bed,#
I1:
S'->S.,#
I2:
S->a.Ad,#
S->a.ec,#
A->.e,d

4.go(I0,b)
若有项目 S->b.Ac,#属于I3,A→e是文法中的产生式,{c}∈V*,c∈FIRST({c#}), 则 A→·e,c 也属于I2中

#mermaid-svg-oZGvt0rW9HZnb8JD .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-oZGvt0rW9HZnb8JD .label text{fill:#333}#mermaid-svg-oZGvt0rW9HZnb8JD .node rect,#mermaid-svg-oZGvt0rW9HZnb8JD .node circle,#mermaid-svg-oZGvt0rW9HZnb8JD .node ellipse,#mermaid-svg-oZGvt0rW9HZnb8JD .node polygon,#mermaid-svg-oZGvt0rW9HZnb8JD .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-oZGvt0rW9HZnb8JD .node .label{text-align:center;fill:#333}#mermaid-svg-oZGvt0rW9HZnb8JD .node.clickable{cursor:pointer}#mermaid-svg-oZGvt0rW9HZnb8JD .arrowheadPath{fill:#333}#mermaid-svg-oZGvt0rW9HZnb8JD .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-oZGvt0rW9HZnb8JD .flowchart-link{stroke:#333;fill:none}#mermaid-svg-oZGvt0rW9HZnb8JD .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-oZGvt0rW9HZnb8JD .edgeLabel rect{opacity:0.9}#mermaid-svg-oZGvt0rW9HZnb8JD .edgeLabel span{color:#333}#mermaid-svg-oZGvt0rW9HZnb8JD .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-oZGvt0rW9HZnb8JD .cluster text{fill:#333}#mermaid-svg-oZGvt0rW9HZnb8JD div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-oZGvt0rW9HZnb8JD .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-oZGvt0rW9HZnb8JD text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-oZGvt0rW9HZnb8JD .actor-line{stroke:grey}#mermaid-svg-oZGvt0rW9HZnb8JD .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-oZGvt0rW9HZnb8JD .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-oZGvt0rW9HZnb8JD #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-oZGvt0rW9HZnb8JD .sequenceNumber{fill:#fff}#mermaid-svg-oZGvt0rW9HZnb8JD #sequencenumber{fill:#333}#mermaid-svg-oZGvt0rW9HZnb8JD #crosshead path{fill:#333;stroke:#333}#mermaid-svg-oZGvt0rW9HZnb8JD .messageText{fill:#333;stroke:#333}#mermaid-svg-oZGvt0rW9HZnb8JD .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-oZGvt0rW9HZnb8JD .labelText,#mermaid-svg-oZGvt0rW9HZnb8JD .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-oZGvt0rW9HZnb8JD .loopText,#mermaid-svg-oZGvt0rW9HZnb8JD .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-oZGvt0rW9HZnb8JD .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-oZGvt0rW9HZnb8JD .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-oZGvt0rW9HZnb8JD .noteText,#mermaid-svg-oZGvt0rW9HZnb8JD .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-oZGvt0rW9HZnb8JD .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-oZGvt0rW9HZnb8JD .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-oZGvt0rW9HZnb8JD .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-oZGvt0rW9HZnb8JD .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-oZGvt0rW9HZnb8JD .section{stroke:none;opacity:0.2}#mermaid-svg-oZGvt0rW9HZnb8JD .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-oZGvt0rW9HZnb8JD .section2{fill:#fff400}#mermaid-svg-oZGvt0rW9HZnb8JD .section1,#mermaid-svg-oZGvt0rW9HZnb8JD .section3{fill:#fff;opacity:0.2}#mermaid-svg-oZGvt0rW9HZnb8JD .sectionTitle0{fill:#333}#mermaid-svg-oZGvt0rW9HZnb8JD .sectionTitle1{fill:#333}#mermaid-svg-oZGvt0rW9HZnb8JD .sectionTitle2{fill:#333}#mermaid-svg-oZGvt0rW9HZnb8JD .sectionTitle3{fill:#333}#mermaid-svg-oZGvt0rW9HZnb8JD .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-oZGvt0rW9HZnb8JD .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-oZGvt0rW9HZnb8JD .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-oZGvt0rW9HZnb8JD .grid path{stroke-width:0}#mermaid-svg-oZGvt0rW9HZnb8JD .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-oZGvt0rW9HZnb8JD .task{stroke-width:2}#mermaid-svg-oZGvt0rW9HZnb8JD .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-oZGvt0rW9HZnb8JD .taskText:not([font-size]){font-size:11px}#mermaid-svg-oZGvt0rW9HZnb8JD .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-oZGvt0rW9HZnb8JD .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-oZGvt0rW9HZnb8JD .task.clickable{cursor:pointer}#mermaid-svg-oZGvt0rW9HZnb8JD .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-oZGvt0rW9HZnb8JD .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-oZGvt0rW9HZnb8JD .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-oZGvt0rW9HZnb8JD .taskText0,#mermaid-svg-oZGvt0rW9HZnb8JD .taskText1,#mermaid-svg-oZGvt0rW9HZnb8JD .taskText2,#mermaid-svg-oZGvt0rW9HZnb8JD .taskText3{fill:#fff}#mermaid-svg-oZGvt0rW9HZnb8JD .task0,#mermaid-svg-oZGvt0rW9HZnb8JD .task1,#mermaid-svg-oZGvt0rW9HZnb8JD .task2,#mermaid-svg-oZGvt0rW9HZnb8JD .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-oZGvt0rW9HZnb8JD .taskTextOutside0,#mermaid-svg-oZGvt0rW9HZnb8JD .taskTextOutside2{fill:#000}#mermaid-svg-oZGvt0rW9HZnb8JD .taskTextOutside1,#mermaid-svg-oZGvt0rW9HZnb8JD .taskTextOutside3{fill:#000}#mermaid-svg-oZGvt0rW9HZnb8JD .active0,#mermaid-svg-oZGvt0rW9HZnb8JD .active1,#mermaid-svg-oZGvt0rW9HZnb8JD .active2,#mermaid-svg-oZGvt0rW9HZnb8JD .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-oZGvt0rW9HZnb8JD .activeText0,#mermaid-svg-oZGvt0rW9HZnb8JD .activeText1,#mermaid-svg-oZGvt0rW9HZnb8JD .activeText2,#mermaid-svg-oZGvt0rW9HZnb8JD .activeText3{fill:#000 !important}#mermaid-svg-oZGvt0rW9HZnb8JD .done0,#mermaid-svg-oZGvt0rW9HZnb8JD .done1,#mermaid-svg-oZGvt0rW9HZnb8JD .done2,#mermaid-svg-oZGvt0rW9HZnb8JD .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-oZGvt0rW9HZnb8JD .doneText0,#mermaid-svg-oZGvt0rW9HZnb8JD .doneText1,#mermaid-svg-oZGvt0rW9HZnb8JD .doneText2,#mermaid-svg-oZGvt0rW9HZnb8JD .doneText3{fill:#000 !important}#mermaid-svg-oZGvt0rW9HZnb8JD .crit0,#mermaid-svg-oZGvt0rW9HZnb8JD .crit1,#mermaid-svg-oZGvt0rW9HZnb8JD .crit2,#mermaid-svg-oZGvt0rW9HZnb8JD .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-oZGvt0rW9HZnb8JD .activeCrit0,#mermaid-svg-oZGvt0rW9HZnb8JD .activeCrit1,#mermaid-svg-oZGvt0rW9HZnb8JD .activeCrit2,#mermaid-svg-oZGvt0rW9HZnb8JD .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-oZGvt0rW9HZnb8JD .doneCrit0,#mermaid-svg-oZGvt0rW9HZnb8JD .doneCrit1,#mermaid-svg-oZGvt0rW9HZnb8JD .doneCrit2,#mermaid-svg-oZGvt0rW9HZnb8JD .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-oZGvt0rW9HZnb8JD .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-oZGvt0rW9HZnb8JD .milestoneText{font-style:italic}#mermaid-svg-oZGvt0rW9HZnb8JD .doneCritText0,#mermaid-svg-oZGvt0rW9HZnb8JD .doneCritText1,#mermaid-svg-oZGvt0rW9HZnb8JD .doneCritText2,#mermaid-svg-oZGvt0rW9HZnb8JD .doneCritText3{fill:#000 !important}#mermaid-svg-oZGvt0rW9HZnb8JD .activeCritText0,#mermaid-svg-oZGvt0rW9HZnb8JD .activeCritText1,#mermaid-svg-oZGvt0rW9HZnb8JD .activeCritText2,#mermaid-svg-oZGvt0rW9HZnb8JD .activeCritText3{fill:#000 !important}#mermaid-svg-oZGvt0rW9HZnb8JD .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-oZGvt0rW9HZnb8JD g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-oZGvt0rW9HZnb8JD g.classGroup text .title{font-weight:bolder}#mermaid-svg-oZGvt0rW9HZnb8JD g.clickable{cursor:pointer}#mermaid-svg-oZGvt0rW9HZnb8JD g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-oZGvt0rW9HZnb8JD g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-oZGvt0rW9HZnb8JD .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-oZGvt0rW9HZnb8JD .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-oZGvt0rW9HZnb8JD .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-oZGvt0rW9HZnb8JD .dashed-line{stroke-dasharray:3}#mermaid-svg-oZGvt0rW9HZnb8JD #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-oZGvt0rW9HZnb8JD #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-oZGvt0rW9HZnb8JD #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-oZGvt0rW9HZnb8JD #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-oZGvt0rW9HZnb8JD #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-oZGvt0rW9HZnb8JD #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-oZGvt0rW9HZnb8JD #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-oZGvt0rW9HZnb8JD #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-oZGvt0rW9HZnb8JD .commit-id,#mermaid-svg-oZGvt0rW9HZnb8JD .commit-msg,#mermaid-svg-oZGvt0rW9HZnb8JD .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-oZGvt0rW9HZnb8JD .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-oZGvt0rW9HZnb8JD .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-oZGvt0rW9HZnb8JD g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-oZGvt0rW9HZnb8JD g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-oZGvt0rW9HZnb8JD g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-oZGvt0rW9HZnb8JD g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-oZGvt0rW9HZnb8JD g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-oZGvt0rW9HZnb8JD g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-oZGvt0rW9HZnb8JD .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-oZGvt0rW9HZnb8JD .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-oZGvt0rW9HZnb8JD .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-oZGvt0rW9HZnb8JD .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-oZGvt0rW9HZnb8JD .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-oZGvt0rW9HZnb8JD .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-oZGvt0rW9HZnb8JD .edgeLabel text{fill:#333}#mermaid-svg-oZGvt0rW9HZnb8JD .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-oZGvt0rW9HZnb8JD .node circle.state-start{fill:black;stroke:black}#mermaid-svg-oZGvt0rW9HZnb8JD .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-oZGvt0rW9HZnb8JD #statediagram-barbEnd{fill:#9370db}#mermaid-svg-oZGvt0rW9HZnb8JD .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-oZGvt0rW9HZnb8JD .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-oZGvt0rW9HZnb8JD .statediagram-state .divider{stroke:#9370db}#mermaid-svg-oZGvt0rW9HZnb8JD .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-oZGvt0rW9HZnb8JD .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-oZGvt0rW9HZnb8JD .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-oZGvt0rW9HZnb8JD .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-oZGvt0rW9HZnb8JD .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-oZGvt0rW9HZnb8JD .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-oZGvt0rW9HZnb8JD .note-edge{stroke-dasharray:5}#mermaid-svg-oZGvt0rW9HZnb8JD .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-oZGvt0rW9HZnb8JD .error-icon{fill:#522}#mermaid-svg-oZGvt0rW9HZnb8JD .error-text{fill:#522;stroke:#522}#mermaid-svg-oZGvt0rW9HZnb8JD .edge-thickness-normal{stroke-width:2px}#mermaid-svg-oZGvt0rW9HZnb8JD .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-oZGvt0rW9HZnb8JD .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-oZGvt0rW9HZnb8JD .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-oZGvt0rW9HZnb8JD .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-oZGvt0rW9HZnb8JD .marker{fill:#333}#mermaid-svg-oZGvt0rW9HZnb8JD .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-oZGvt0rW9HZnb8JD {color: rgba(0, 0, 0, 0.75);font: ;}

S
a
b
I0:
S'->.S,#
S->.aAd,#
S->.bAc,#
S->.aec,#
S->.bed,#
I1:
S'->S.,#
I2:
S->a.Ad,#
S->a.ec,#
A->.e,d
I3:
S->b.Ac,#
S->b.ed,#
A->.e,c

5.最终集

#mermaid-svg-QorjnEtjqAG9sGY1 .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-QorjnEtjqAG9sGY1 .label text{fill:#333}#mermaid-svg-QorjnEtjqAG9sGY1 .node rect,#mermaid-svg-QorjnEtjqAG9sGY1 .node circle,#mermaid-svg-QorjnEtjqAG9sGY1 .node ellipse,#mermaid-svg-QorjnEtjqAG9sGY1 .node polygon,#mermaid-svg-QorjnEtjqAG9sGY1 .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-QorjnEtjqAG9sGY1 .node .label{text-align:center;fill:#333}#mermaid-svg-QorjnEtjqAG9sGY1 .node.clickable{cursor:pointer}#mermaid-svg-QorjnEtjqAG9sGY1 .arrowheadPath{fill:#333}#mermaid-svg-QorjnEtjqAG9sGY1 .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-QorjnEtjqAG9sGY1 .flowchart-link{stroke:#333;fill:none}#mermaid-svg-QorjnEtjqAG9sGY1 .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-QorjnEtjqAG9sGY1 .edgeLabel rect{opacity:0.9}#mermaid-svg-QorjnEtjqAG9sGY1 .edgeLabel span{color:#333}#mermaid-svg-QorjnEtjqAG9sGY1 .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-QorjnEtjqAG9sGY1 .cluster text{fill:#333}#mermaid-svg-QorjnEtjqAG9sGY1 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-QorjnEtjqAG9sGY1 .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-QorjnEtjqAG9sGY1 text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-QorjnEtjqAG9sGY1 .actor-line{stroke:grey}#mermaid-svg-QorjnEtjqAG9sGY1 .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-QorjnEtjqAG9sGY1 .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-QorjnEtjqAG9sGY1 #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-QorjnEtjqAG9sGY1 .sequenceNumber{fill:#fff}#mermaid-svg-QorjnEtjqAG9sGY1 #sequencenumber{fill:#333}#mermaid-svg-QorjnEtjqAG9sGY1 #crosshead path{fill:#333;stroke:#333}#mermaid-svg-QorjnEtjqAG9sGY1 .messageText{fill:#333;stroke:#333}#mermaid-svg-QorjnEtjqAG9sGY1 .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-QorjnEtjqAG9sGY1 .labelText,#mermaid-svg-QorjnEtjqAG9sGY1 .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-QorjnEtjqAG9sGY1 .loopText,#mermaid-svg-QorjnEtjqAG9sGY1 .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-QorjnEtjqAG9sGY1 .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-QorjnEtjqAG9sGY1 .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-QorjnEtjqAG9sGY1 .noteText,#mermaid-svg-QorjnEtjqAG9sGY1 .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-QorjnEtjqAG9sGY1 .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-QorjnEtjqAG9sGY1 .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-QorjnEtjqAG9sGY1 .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-QorjnEtjqAG9sGY1 .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-QorjnEtjqAG9sGY1 .section{stroke:none;opacity:0.2}#mermaid-svg-QorjnEtjqAG9sGY1 .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-QorjnEtjqAG9sGY1 .section2{fill:#fff400}#mermaid-svg-QorjnEtjqAG9sGY1 .section1,#mermaid-svg-QorjnEtjqAG9sGY1 .section3{fill:#fff;opacity:0.2}#mermaid-svg-QorjnEtjqAG9sGY1 .sectionTitle0{fill:#333}#mermaid-svg-QorjnEtjqAG9sGY1 .sectionTitle1{fill:#333}#mermaid-svg-QorjnEtjqAG9sGY1 .sectionTitle2{fill:#333}#mermaid-svg-QorjnEtjqAG9sGY1 .sectionTitle3{fill:#333}#mermaid-svg-QorjnEtjqAG9sGY1 .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-QorjnEtjqAG9sGY1 .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-QorjnEtjqAG9sGY1 .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-QorjnEtjqAG9sGY1 .grid path{stroke-width:0}#mermaid-svg-QorjnEtjqAG9sGY1 .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-QorjnEtjqAG9sGY1 .task{stroke-width:2}#mermaid-svg-QorjnEtjqAG9sGY1 .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-QorjnEtjqAG9sGY1 .taskText:not([font-size]){font-size:11px}#mermaid-svg-QorjnEtjqAG9sGY1 .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-QorjnEtjqAG9sGY1 .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-QorjnEtjqAG9sGY1 .task.clickable{cursor:pointer}#mermaid-svg-QorjnEtjqAG9sGY1 .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-QorjnEtjqAG9sGY1 .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-QorjnEtjqAG9sGY1 .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-QorjnEtjqAG9sGY1 .taskText0,#mermaid-svg-QorjnEtjqAG9sGY1 .taskText1,#mermaid-svg-QorjnEtjqAG9sGY1 .taskText2,#mermaid-svg-QorjnEtjqAG9sGY1 .taskText3{fill:#fff}#mermaid-svg-QorjnEtjqAG9sGY1 .task0,#mermaid-svg-QorjnEtjqAG9sGY1 .task1,#mermaid-svg-QorjnEtjqAG9sGY1 .task2,#mermaid-svg-QorjnEtjqAG9sGY1 .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-QorjnEtjqAG9sGY1 .taskTextOutside0,#mermaid-svg-QorjnEtjqAG9sGY1 .taskTextOutside2{fill:#000}#mermaid-svg-QorjnEtjqAG9sGY1 .taskTextOutside1,#mermaid-svg-QorjnEtjqAG9sGY1 .taskTextOutside3{fill:#000}#mermaid-svg-QorjnEtjqAG9sGY1 .active0,#mermaid-svg-QorjnEtjqAG9sGY1 .active1,#mermaid-svg-QorjnEtjqAG9sGY1 .active2,#mermaid-svg-QorjnEtjqAG9sGY1 .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-QorjnEtjqAG9sGY1 .activeText0,#mermaid-svg-QorjnEtjqAG9sGY1 .activeText1,#mermaid-svg-QorjnEtjqAG9sGY1 .activeText2,#mermaid-svg-QorjnEtjqAG9sGY1 .activeText3{fill:#000 !important}#mermaid-svg-QorjnEtjqAG9sGY1 .done0,#mermaid-svg-QorjnEtjqAG9sGY1 .done1,#mermaid-svg-QorjnEtjqAG9sGY1 .done2,#mermaid-svg-QorjnEtjqAG9sGY1 .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-QorjnEtjqAG9sGY1 .doneText0,#mermaid-svg-QorjnEtjqAG9sGY1 .doneText1,#mermaid-svg-QorjnEtjqAG9sGY1 .doneText2,#mermaid-svg-QorjnEtjqAG9sGY1 .doneText3{fill:#000 !important}#mermaid-svg-QorjnEtjqAG9sGY1 .crit0,#mermaid-svg-QorjnEtjqAG9sGY1 .crit1,#mermaid-svg-QorjnEtjqAG9sGY1 .crit2,#mermaid-svg-QorjnEtjqAG9sGY1 .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-QorjnEtjqAG9sGY1 .activeCrit0,#mermaid-svg-QorjnEtjqAG9sGY1 .activeCrit1,#mermaid-svg-QorjnEtjqAG9sGY1 .activeCrit2,#mermaid-svg-QorjnEtjqAG9sGY1 .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-QorjnEtjqAG9sGY1 .doneCrit0,#mermaid-svg-QorjnEtjqAG9sGY1 .doneCrit1,#mermaid-svg-QorjnEtjqAG9sGY1 .doneCrit2,#mermaid-svg-QorjnEtjqAG9sGY1 .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-QorjnEtjqAG9sGY1 .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-QorjnEtjqAG9sGY1 .milestoneText{font-style:italic}#mermaid-svg-QorjnEtjqAG9sGY1 .doneCritText0,#mermaid-svg-QorjnEtjqAG9sGY1 .doneCritText1,#mermaid-svg-QorjnEtjqAG9sGY1 .doneCritText2,#mermaid-svg-QorjnEtjqAG9sGY1 .doneCritText3{fill:#000 !important}#mermaid-svg-QorjnEtjqAG9sGY1 .activeCritText0,#mermaid-svg-QorjnEtjqAG9sGY1 .activeCritText1,#mermaid-svg-QorjnEtjqAG9sGY1 .activeCritText2,#mermaid-svg-QorjnEtjqAG9sGY1 .activeCritText3{fill:#000 !important}#mermaid-svg-QorjnEtjqAG9sGY1 .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-QorjnEtjqAG9sGY1 g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-QorjnEtjqAG9sGY1 g.classGroup text .title{font-weight:bolder}#mermaid-svg-QorjnEtjqAG9sGY1 g.clickable{cursor:pointer}#mermaid-svg-QorjnEtjqAG9sGY1 g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-QorjnEtjqAG9sGY1 g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-QorjnEtjqAG9sGY1 .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-QorjnEtjqAG9sGY1 .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-QorjnEtjqAG9sGY1 .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-QorjnEtjqAG9sGY1 .dashed-line{stroke-dasharray:3}#mermaid-svg-QorjnEtjqAG9sGY1 #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-QorjnEtjqAG9sGY1 #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-QorjnEtjqAG9sGY1 #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-QorjnEtjqAG9sGY1 #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-QorjnEtjqAG9sGY1 #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-QorjnEtjqAG9sGY1 #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-QorjnEtjqAG9sGY1 #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-QorjnEtjqAG9sGY1 #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-QorjnEtjqAG9sGY1 .commit-id,#mermaid-svg-QorjnEtjqAG9sGY1 .commit-msg,#mermaid-svg-QorjnEtjqAG9sGY1 .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-QorjnEtjqAG9sGY1 .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-QorjnEtjqAG9sGY1 .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-QorjnEtjqAG9sGY1 g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-QorjnEtjqAG9sGY1 g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-QorjnEtjqAG9sGY1 g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-QorjnEtjqAG9sGY1 g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-QorjnEtjqAG9sGY1 g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-QorjnEtjqAG9sGY1 g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-QorjnEtjqAG9sGY1 .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-QorjnEtjqAG9sGY1 .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-QorjnEtjqAG9sGY1 .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-QorjnEtjqAG9sGY1 .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-QorjnEtjqAG9sGY1 .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-QorjnEtjqAG9sGY1 .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-QorjnEtjqAG9sGY1 .edgeLabel text{fill:#333}#mermaid-svg-QorjnEtjqAG9sGY1 .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-QorjnEtjqAG9sGY1 .node circle.state-start{fill:black;stroke:black}#mermaid-svg-QorjnEtjqAG9sGY1 .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-QorjnEtjqAG9sGY1 #statediagram-barbEnd{fill:#9370db}#mermaid-svg-QorjnEtjqAG9sGY1 .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-QorjnEtjqAG9sGY1 .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-QorjnEtjqAG9sGY1 .statediagram-state .divider{stroke:#9370db}#mermaid-svg-QorjnEtjqAG9sGY1 .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-QorjnEtjqAG9sGY1 .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-QorjnEtjqAG9sGY1 .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-QorjnEtjqAG9sGY1 .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-QorjnEtjqAG9sGY1 .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-QorjnEtjqAG9sGY1 .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-QorjnEtjqAG9sGY1 .note-edge{stroke-dasharray:5}#mermaid-svg-QorjnEtjqAG9sGY1 .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-QorjnEtjqAG9sGY1 .error-icon{fill:#522}#mermaid-svg-QorjnEtjqAG9sGY1 .error-text{fill:#522;stroke:#522}#mermaid-svg-QorjnEtjqAG9sGY1 .edge-thickness-normal{stroke-width:2px}#mermaid-svg-QorjnEtjqAG9sGY1 .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-QorjnEtjqAG9sGY1 .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-QorjnEtjqAG9sGY1 .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-QorjnEtjqAG9sGY1 .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-QorjnEtjqAG9sGY1 .marker{fill:#333}#mermaid-svg-QorjnEtjqAG9sGY1 .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-QorjnEtjqAG9sGY1 {color: rgba(0, 0, 0, 0.75);font: ;}

S
a
b
A
e
A
e
d
c
c
c
I0:
S'->.S,#
S->.aAd,#
S->.bAc,#
S->.aec,#
S->.bed,#
I1:
S'->S.,#
I2:
S->a.Ad,#
S->a.ec,#
A->.e,d
I3:
S->b.Ac,#
S->b.ed,#
A->.e,c
I4:
S->aA.d,#
I5:
>S->ae.c,#
A->e.,d
I6:
S->bA.c,#
I7:
S->be.d,#
A->e.,c
I8:
S->aAd.,#
I9:
S->ae.c,#
I10:
S->bAc.,#
I11:
S->bed.,#

LR(1)分析表构造

状态 ACTION GOTO
a b c d e # S A
0 S2 S3 1
1 acc
2 S5 4
3 S7 6
4 S8
5 S9 r5
6 S10
7 r5 S11
8 r1
9 r3
10 r2
11 r4

LALR(1)分析

LR(1)分析表的构造对搜索符的计算方法比较确切,对文法放宽了要求,可以解决SLR(1)方法中解决不了的问题,介是,由于它的构造对某些同心集的分裂对状态数目引起剧烈增长,从而导致存储容量增加,为了克服LR(1)的这种缺点,我们可采用对LR(1)项目集规范族合并同心集的方法,若合并的同心集不产生冲突,则为LALR(1)项目集

详情(略)

二义性文法在LR分析中的应用

我们已经知道任何一个二义性文法绝不是LR类文法,也不是一个算符优先文法或者LL(K)文法,任何一个二义性文法不存在与其相应的确定的语法分析器,但是对于基些二义性文法,我们可以人为地给出优先性和结合性的规定,从而可以构造出比相应非二义性文法更优越的LR分析器

给定文法G[E’]:
E’->E
E -> E + E
E ->E * E
E -> (E)
E -> i

LR(0)项目集构造

#mermaid-svg-4LpIKpDGrFR9l7Su .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-4LpIKpDGrFR9l7Su .label text{fill:#333}#mermaid-svg-4LpIKpDGrFR9l7Su .node rect,#mermaid-svg-4LpIKpDGrFR9l7Su .node circle,#mermaid-svg-4LpIKpDGrFR9l7Su .node ellipse,#mermaid-svg-4LpIKpDGrFR9l7Su .node polygon,#mermaid-svg-4LpIKpDGrFR9l7Su .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-4LpIKpDGrFR9l7Su .node .label{text-align:center;fill:#333}#mermaid-svg-4LpIKpDGrFR9l7Su .node.clickable{cursor:pointer}#mermaid-svg-4LpIKpDGrFR9l7Su .arrowheadPath{fill:#333}#mermaid-svg-4LpIKpDGrFR9l7Su .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-4LpIKpDGrFR9l7Su .flowchart-link{stroke:#333;fill:none}#mermaid-svg-4LpIKpDGrFR9l7Su .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-4LpIKpDGrFR9l7Su .edgeLabel rect{opacity:0.9}#mermaid-svg-4LpIKpDGrFR9l7Su .edgeLabel span{color:#333}#mermaid-svg-4LpIKpDGrFR9l7Su .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-4LpIKpDGrFR9l7Su .cluster text{fill:#333}#mermaid-svg-4LpIKpDGrFR9l7Su div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-4LpIKpDGrFR9l7Su .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-4LpIKpDGrFR9l7Su text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-4LpIKpDGrFR9l7Su .actor-line{stroke:grey}#mermaid-svg-4LpIKpDGrFR9l7Su .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-4LpIKpDGrFR9l7Su .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-4LpIKpDGrFR9l7Su #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-4LpIKpDGrFR9l7Su .sequenceNumber{fill:#fff}#mermaid-svg-4LpIKpDGrFR9l7Su #sequencenumber{fill:#333}#mermaid-svg-4LpIKpDGrFR9l7Su #crosshead path{fill:#333;stroke:#333}#mermaid-svg-4LpIKpDGrFR9l7Su .messageText{fill:#333;stroke:#333}#mermaid-svg-4LpIKpDGrFR9l7Su .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-4LpIKpDGrFR9l7Su .labelText,#mermaid-svg-4LpIKpDGrFR9l7Su .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-4LpIKpDGrFR9l7Su .loopText,#mermaid-svg-4LpIKpDGrFR9l7Su .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-4LpIKpDGrFR9l7Su .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-4LpIKpDGrFR9l7Su .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-4LpIKpDGrFR9l7Su .noteText,#mermaid-svg-4LpIKpDGrFR9l7Su .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-4LpIKpDGrFR9l7Su .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-4LpIKpDGrFR9l7Su .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-4LpIKpDGrFR9l7Su .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-4LpIKpDGrFR9l7Su .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-4LpIKpDGrFR9l7Su .section{stroke:none;opacity:0.2}#mermaid-svg-4LpIKpDGrFR9l7Su .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-4LpIKpDGrFR9l7Su .section2{fill:#fff400}#mermaid-svg-4LpIKpDGrFR9l7Su .section1,#mermaid-svg-4LpIKpDGrFR9l7Su .section3{fill:#fff;opacity:0.2}#mermaid-svg-4LpIKpDGrFR9l7Su .sectionTitle0{fill:#333}#mermaid-svg-4LpIKpDGrFR9l7Su .sectionTitle1{fill:#333}#mermaid-svg-4LpIKpDGrFR9l7Su .sectionTitle2{fill:#333}#mermaid-svg-4LpIKpDGrFR9l7Su .sectionTitle3{fill:#333}#mermaid-svg-4LpIKpDGrFR9l7Su .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-4LpIKpDGrFR9l7Su .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-4LpIKpDGrFR9l7Su .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-4LpIKpDGrFR9l7Su .grid path{stroke-width:0}#mermaid-svg-4LpIKpDGrFR9l7Su .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-4LpIKpDGrFR9l7Su .task{stroke-width:2}#mermaid-svg-4LpIKpDGrFR9l7Su .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-4LpIKpDGrFR9l7Su .taskText:not([font-size]){font-size:11px}#mermaid-svg-4LpIKpDGrFR9l7Su .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-4LpIKpDGrFR9l7Su .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-4LpIKpDGrFR9l7Su .task.clickable{cursor:pointer}#mermaid-svg-4LpIKpDGrFR9l7Su .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-4LpIKpDGrFR9l7Su .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-4LpIKpDGrFR9l7Su .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-4LpIKpDGrFR9l7Su .taskText0,#mermaid-svg-4LpIKpDGrFR9l7Su .taskText1,#mermaid-svg-4LpIKpDGrFR9l7Su .taskText2,#mermaid-svg-4LpIKpDGrFR9l7Su .taskText3{fill:#fff}#mermaid-svg-4LpIKpDGrFR9l7Su .task0,#mermaid-svg-4LpIKpDGrFR9l7Su .task1,#mermaid-svg-4LpIKpDGrFR9l7Su .task2,#mermaid-svg-4LpIKpDGrFR9l7Su .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-4LpIKpDGrFR9l7Su .taskTextOutside0,#mermaid-svg-4LpIKpDGrFR9l7Su .taskTextOutside2{fill:#000}#mermaid-svg-4LpIKpDGrFR9l7Su .taskTextOutside1,#mermaid-svg-4LpIKpDGrFR9l7Su .taskTextOutside3{fill:#000}#mermaid-svg-4LpIKpDGrFR9l7Su .active0,#mermaid-svg-4LpIKpDGrFR9l7Su .active1,#mermaid-svg-4LpIKpDGrFR9l7Su .active2,#mermaid-svg-4LpIKpDGrFR9l7Su .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-4LpIKpDGrFR9l7Su .activeText0,#mermaid-svg-4LpIKpDGrFR9l7Su .activeText1,#mermaid-svg-4LpIKpDGrFR9l7Su .activeText2,#mermaid-svg-4LpIKpDGrFR9l7Su .activeText3{fill:#000 !important}#mermaid-svg-4LpIKpDGrFR9l7Su .done0,#mermaid-svg-4LpIKpDGrFR9l7Su .done1,#mermaid-svg-4LpIKpDGrFR9l7Su .done2,#mermaid-svg-4LpIKpDGrFR9l7Su .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-4LpIKpDGrFR9l7Su .doneText0,#mermaid-svg-4LpIKpDGrFR9l7Su .doneText1,#mermaid-svg-4LpIKpDGrFR9l7Su .doneText2,#mermaid-svg-4LpIKpDGrFR9l7Su .doneText3{fill:#000 !important}#mermaid-svg-4LpIKpDGrFR9l7Su .crit0,#mermaid-svg-4LpIKpDGrFR9l7Su .crit1,#mermaid-svg-4LpIKpDGrFR9l7Su .crit2,#mermaid-svg-4LpIKpDGrFR9l7Su .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-4LpIKpDGrFR9l7Su .activeCrit0,#mermaid-svg-4LpIKpDGrFR9l7Su .activeCrit1,#mermaid-svg-4LpIKpDGrFR9l7Su .activeCrit2,#mermaid-svg-4LpIKpDGrFR9l7Su .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-4LpIKpDGrFR9l7Su .doneCrit0,#mermaid-svg-4LpIKpDGrFR9l7Su .doneCrit1,#mermaid-svg-4LpIKpDGrFR9l7Su .doneCrit2,#mermaid-svg-4LpIKpDGrFR9l7Su .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-4LpIKpDGrFR9l7Su .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-4LpIKpDGrFR9l7Su .milestoneText{font-style:italic}#mermaid-svg-4LpIKpDGrFR9l7Su .doneCritText0,#mermaid-svg-4LpIKpDGrFR9l7Su .doneCritText1,#mermaid-svg-4LpIKpDGrFR9l7Su .doneCritText2,#mermaid-svg-4LpIKpDGrFR9l7Su .doneCritText3{fill:#000 !important}#mermaid-svg-4LpIKpDGrFR9l7Su .activeCritText0,#mermaid-svg-4LpIKpDGrFR9l7Su .activeCritText1,#mermaid-svg-4LpIKpDGrFR9l7Su .activeCritText2,#mermaid-svg-4LpIKpDGrFR9l7Su .activeCritText3{fill:#000 !important}#mermaid-svg-4LpIKpDGrFR9l7Su .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-4LpIKpDGrFR9l7Su g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-4LpIKpDGrFR9l7Su g.classGroup text .title{font-weight:bolder}#mermaid-svg-4LpIKpDGrFR9l7Su g.clickable{cursor:pointer}#mermaid-svg-4LpIKpDGrFR9l7Su g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-4LpIKpDGrFR9l7Su g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-4LpIKpDGrFR9l7Su .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-4LpIKpDGrFR9l7Su .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-4LpIKpDGrFR9l7Su .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-4LpIKpDGrFR9l7Su .dashed-line{stroke-dasharray:3}#mermaid-svg-4LpIKpDGrFR9l7Su #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-4LpIKpDGrFR9l7Su #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-4LpIKpDGrFR9l7Su #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-4LpIKpDGrFR9l7Su #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-4LpIKpDGrFR9l7Su #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-4LpIKpDGrFR9l7Su #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-4LpIKpDGrFR9l7Su #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-4LpIKpDGrFR9l7Su #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-4LpIKpDGrFR9l7Su .commit-id,#mermaid-svg-4LpIKpDGrFR9l7Su .commit-msg,#mermaid-svg-4LpIKpDGrFR9l7Su .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-4LpIKpDGrFR9l7Su .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-4LpIKpDGrFR9l7Su .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-4LpIKpDGrFR9l7Su g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-4LpIKpDGrFR9l7Su g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-4LpIKpDGrFR9l7Su g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-4LpIKpDGrFR9l7Su g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-4LpIKpDGrFR9l7Su g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-4LpIKpDGrFR9l7Su g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-4LpIKpDGrFR9l7Su .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-4LpIKpDGrFR9l7Su .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-4LpIKpDGrFR9l7Su .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-4LpIKpDGrFR9l7Su .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-4LpIKpDGrFR9l7Su .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-4LpIKpDGrFR9l7Su .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-4LpIKpDGrFR9l7Su .edgeLabel text{fill:#333}#mermaid-svg-4LpIKpDGrFR9l7Su .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-4LpIKpDGrFR9l7Su .node circle.state-start{fill:black;stroke:black}#mermaid-svg-4LpIKpDGrFR9l7Su .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-4LpIKpDGrFR9l7Su #statediagram-barbEnd{fill:#9370db}#mermaid-svg-4LpIKpDGrFR9l7Su .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-4LpIKpDGrFR9l7Su .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-4LpIKpDGrFR9l7Su .statediagram-state .divider{stroke:#9370db}#mermaid-svg-4LpIKpDGrFR9l7Su .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-4LpIKpDGrFR9l7Su .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-4LpIKpDGrFR9l7Su .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-4LpIKpDGrFR9l7Su .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-4LpIKpDGrFR9l7Su .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-4LpIKpDGrFR9l7Su .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-4LpIKpDGrFR9l7Su .note-edge{stroke-dasharray:5}#mermaid-svg-4LpIKpDGrFR9l7Su .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-4LpIKpDGrFR9l7Su .error-icon{fill:#522}#mermaid-svg-4LpIKpDGrFR9l7Su .error-text{fill:#522;stroke:#522}#mermaid-svg-4LpIKpDGrFR9l7Su .edge-thickness-normal{stroke-width:2px}#mermaid-svg-4LpIKpDGrFR9l7Su .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-4LpIKpDGrFR9l7Su .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-4LpIKpDGrFR9l7Su .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-4LpIKpDGrFR9l7Su .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-4LpIKpDGrFR9l7Su .marker{fill:#333}#mermaid-svg-4LpIKpDGrFR9l7Su .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-4LpIKpDGrFR9l7Su {color: rgba(0, 0, 0, 0.75);font: ;}

E
(
i
+
*
(
i
E
(
i
E
(
i
E
+
*
)
+
*
+
*
I0:
E'->.E
E->.E+E
E->.E*E
E->.(E)
E->.i
I1:
E'->E.
E->E.+E
E->E.*E
I2:
E->(.E)
E->.E+E
E->.E*E
E->.(E)
E->.i
I3:
E->i.
I4:
E->E+.E
E->.E+E
E->.E*E
E->.(E)
E->.i
I5:
E->E*.E
E->.E+E
E->.E*E
E->.(E)
E->.i
I6:
E->(E.)
E->E.+E
E->E.*E
I7:
E->E+E.
E->E.+E
E->E.*E
I8:
E->E*E.
E->E.+E
E->E.*E
I9:
E->(E).

结合follow(E)={+,*,),#}得分析表

状态 ACTION GOTO
+ * ( ) i # E
0 S2 S3 1
1 S4 S5 acc
2 S2 S3 6
3 r4 r4 r4 r4
4 S2 S3 7
5 S2 S3 8
6 S4 S5 S9
7 r1,S4 r1,S5 r1 r1
8 r2,S4 r2.S5 r2 r2
9 r3 r3 r3 r3

从图中状态可以看出I7和I8中存在移进-归约冲突。但用SLR(1)和LR(K)仍不能解决。然而我们可以用优先关系和结合性可以解决。

1.规定算法的优先关系如下:

1)*优先级最高,具有左结合性
2)+优先级最低,具有左结合性
3)(和),括号的优先级小于括号内运算符,大于括号外运算符优先级;内括号的优先级大于外括号的优先级
4)任何于#相邻的符号的优先级都大于#

2.算符优先关系表如下

+ * ( ) i #
+ > < < > < >
* > > < > < >
( < < < <
) > > > >
) > > > >
# < < < < =

3.结合算符优先关系表改造得

在i7中,前算符为+,
1.因算符优先关系表中[+>+]进行归约
2.因算符优先关系表中[+<]进行移进
在i8中,前算符为

1.因算符优先关系表中[>+]进行归约
2.因算符优先关系表中[
>*]进行归约

状态 ACTION GOTO
+ * ( ) i # E
0 S2 S3 1
1 S4 S5 acc
2 S2 S3 6
3 r4 r4 r4 r4
4 S2 S3 7
5 S2 S3 8
6 S4 S5 S9
7 r1 S5 r1 r1
8 r2 r2 r2 r2
9 r3 r3 r3 r3

4.输入字符串i + i * i

步骤 状态栈 符号栈 输入符串 动作
1 0 # i+i*i# 移进S2
2 03 #i +i*i# 归约r4转到【1】
3 01 #E +i*i# 移进S4
4 014 #E+ i*i# 移进S3
5 0143 #E+i *i# 归约r4转到【7】
6 0147 #E+E * i# 移进S5
7 01475 #E+E* i# 移进S3
8 014753 #E+E*i # 归约r4转到【8】
9 014758 #E+E*E # 归约r2转到【7】
10 0147 #E+E # 归约r1转到【1】
11 01 #E # acc

自底向上语法分析LR(1)相关推荐

  1. 自底向上语法分析(bottom-up parsing)

    自底向上语法分析(bottom-up parsing) 自底向上分析概述 LR分析概述 LR(0)分析 增广文法 点标记 项目 LR(0)分析表 CLOSURE函数 GOTO函数 LR(0)自动机的状 ...

  2. LR语法分析------LR(0)、SLR(1)

    概述: LR分析法是一种自下而上进行规范归约的语法分析法,L指从左到右扫描输入符号串,R是指构造最右推导的逆过程.对大多数无二义性上下文无关文法描述的语言都可用它进行有效的分析.主要分析器有LR(0) ...

  3. 编译原理实验:自下而上的语法分析--(LR分析)

    LR分析(NCWU慎用) 1.实验要求 ⑴ 选择LR分析方法: ⑵ 选择对各种常见程序语言都用的语法结构,如赋值语句或表达式或控制流语句等作为分析对象,并且与所选语法分析方法要比较贴切. ⑶ 实验时间 ...

  4. 自下而上的语法分析——LR(0)和SLR分析

    借助于一个栈,可以将这种方法简化为"移进-规约分析": 从左向右逐个扫描待分析的单词符号串,并将串中单词一个一个地移入栈中,边移入边分析:每当栈顶符号串形成了所给文法的某个产生式右 ...

  5. 【编译原理笔记06】语法分析,移入-归约分析:自底向上的分析,LR(0)分析法,LR(0)分析表的构建(基于自动机)

    本次笔记内容: 4-8 自底向上的分析概述 4-9 LR分析法概述 4-10 LR0分析 4-11 LR0分析表构造 本节课幻灯片,见于我的 GitHub 仓库:第6讲 语法分析_3.pdf 本节课介 ...

  6. 《编译原理》-用例题理解-自底向上的语法分析,FIRSTVT,LASTVT集

    <编译原理>-用例题理解-自底向上的语法分析,FIRSTVT,LASTVT集 上一篇:<编译原理>-用例题理解-自顶向下语法分析及 FIRST,FOLLOW,SELECT集,L ...

  7. 编译原理--语法分析:LR

    归约 可将自底向上语法分析过程看成将一个串ω"归约"为文法开始符号的过程. 在每个归约步骤中, 一个与某产生式体相匹配的特定子串被替换为该产生式头部的非终结符号. 句柄剪枝 如有S=>^{*}_ ...

  8. 【编译原理】Python语法分析LL(1)、LR(1)

    目录 一.实验目的 二.实验任务 三.实验原理 1  LL(1)文法 2  LR文法 四.实验过程 1  LL(1)文法 2  LR文法 五.实验结果 1  LL(1)文法 2  LR(0)文法 3 ...

  9. java实现语法分析器_语法分析 | 语法分析的任务

    在之前,我们有对编译器做过一定的介绍,我们认为编译器是具有一定流水线结构的软件系统.它可以分为前端,中端和后端这样的不同的阶段. 编译器前端 对于我们正在研究的前端,我们已经通过词法分析的学习掌握了从 ...

  10. C++:编译实验之LR分析器

    实验目的 (1)掌握有限自动机这一数学模型的结构和理论,并深刻理解下推自动机在LR分析法中的应用(即LR分析器). (2)掌握LR分析法的思想,学会特定分析表的构造方法,利用给出的分析表进行LR分析. ...

最新文章

  1. centos7.0 安装nginx
  2. 学python是看书还是看视频-Python与豆瓣读书
  3. 一、Vmware安装Centos7虚拟机
  4. 程序员面试金典 - 面试题 02.01. 移除重复节点(哈希set)
  5. matlab找距离最近的元素,如何用MATLAB找到给定坐标的最近点?
  6. android升级异常,升级AndroidX遇到的问题
  7. Flex App的Size和Link报告
  8. java递归求和_java递归算法求和有哪些方式实现?
  9. 视易精通收银服务器自动关机,视易收银系统总汇
  10. Fastboot驱动及安装
  11. Tcl/Tk快速入门
  12. Office 2016 系列 VOL版本下载
  13. 体验车联网,你选对物联网卡了吗?
  14. proe5.0启动失败,光标转了几圈后没有任何反应
  15. 考前集训 Day1下午
  16. JavaScript中的join() 方法
  17. 计算机作品大赛微课,我校微课作品获2018年中国大学生计算机设计大赛二等奖...
  18. 十五天学会Autodesk Inventor,看完这一系列就够了(一),前言—介绍及区别
  19. Jenkins进阶系列之——03parameterized-trigger插件
  20. 《征服老板:零基础做出高逼格PPT》笔记(一)

热门文章

  1. 雪亮工程建设标准_2018年雪亮工程建设方案
  2. 各大 Android 手机厂商获取 OAID 开源项目!
  3. iVMS-8700综合安防管理平台第三方开发
  4. SVN工具将本地代码导入SVN资源库
  5. win10本地策略组脚本
  6. 【Linux】进程通信、同步、IO复用代码
  7. 【f1c200s/f1c100s】屏幕背光驱动适配
  8. [Python从零到壹] 五十三.图像增强及运算篇之直方图均衡化处理
  9. 公差带与配合 常用基轴制公差带的相互关系
  10. c语言实现按键的抖动与消除,7.3 按键消抖