编译原理个人作业--第五章——基于 编译原理 国防工业出版社 第三版

news2024/11/17 9:15:07

1

文法 G 1 G_1 G1

E → E + T ∣ T T → T ∗ F ∣ F F → ( E ) ∣ i E\rightarrow E+T|T\\ T\rightarrow T*F|F\\ F\rightarrow(E)|i EE+TTTTFFF(E)i

请证明 E + T ∗ F E+T*F E+TF是他的一个句型(课本写的是E+T*T感觉是印错了),指出它的所有短语,直接短语,句柄

证明过程

E ⇒ E + T ⇒ E + T ∗ F E\Rightarrow E+T\Rightarrow E+T*F EE+TE+TF

在这里插入图片描述

短语 (句型的语法树的任意一个子树节点组成的符号串都是该句型的短语)

  • E + T ∗ F E+T*F E+TF (根部E的叶节点符号串)
  • T ∗ F T*F TF (由E衍生出的根部T的叶节点符号串)

直接短语 (不再包含其他子树的数形成的短语)

  • T ∗ F T*F TF (由E衍生出的根部T的叶节点符号串) (T不再包含任何子树)

句柄 (直接短语中的最左直接短语

  • T ∗ F T*F TF

2

文法 G 2 G_2 G2

S → a ∣ ∧ ∣ ( T ) T → T , S ∣ S S\rightarrow a|\land|(T)\\ T\rightarrow T,S|S Sa(T)TT,SS

1 给出(a,(a,a))和(((a,a),^,(a)),a)的最左最右推导

(a,(a,a))最左推导

S ⇒ ( T ) ⇒ ( T , S ) ⇒ ( S , S ) ⇒ ( a , S ) ⇒ ( a , ( T ) ) ⇒ ( a , ( S , T ) ) ⇒ ( a , ( T , T ) ) ⇒ ( a , ( a , T ) ) ⇒ ( a , ( a , a ) ) S\Rightarrow (T)\Rightarrow (T,S) \Rightarrow (S,S)\Rightarrow (a,S) \Rightarrow (a,(T))\\\Rightarrow (a,(S,T))\Rightarrow (a,(T,T))\Rightarrow (a,(a,T))\Rightarrow (a,(a,a)) S(T)(T,S)(S,S)(a,S)(a,(T))(a,(S,T))(a,(T,T))(a,(a,T))(a,(a,a))

(a,(a,a))最右推导

S ⇒ ( T ) ⇒ ( T , S ) ⇒ ( T , ( T ) ) ⇒ ( T , ( T , S ) ) ⇒ ( T , ( T , a ) ) ⇒ ( T , ( S , a ) ) ⇒ ( T , ( a , a ) ) ⇒ ( S , ( a , a ) ) ⇒ ( a , ( a , a ) ) S\Rightarrow (T)\Rightarrow (T,S) \Rightarrow (T,(T)) \Rightarrow (T,(T,S)) \Rightarrow (T,(T,a)) \\\Rightarrow (T,(S,a)) \Rightarrow (T,(a,a)) \Rightarrow (S,(a,a)) \Rightarrow (a,(a,a)) S(T)(T,S)(T,(T))(T,(T,S))(T,(T,a))(T,(S,a))(T,(a,a))(S,(a,a))(a,(a,a))

(((a,a),^,(a)),a)最左推导

S ⇒ ( T ) ⇒ ( T , S ) ⇒ ( S , S ) ⇒ ( ( T ) , S ) ⇒ ( ( T , S ) , S ) ⇒ ( ( T , S , S ) , S ) ⇒ ( ( S , S , S ) , S ) ⇒ ( ( ( T ) , S , S ) , S ) ⇒ ( ( ( T , S ) , S , S ) , S ) ⇒ ( ( ( S , S ) , S , S ) , S ) ⇒ ( ( ( a , S ) , S , S ) , S ) ⇒ ( ( ( a , a ) , S , S ) , S ) ⇒ ( ( ( a , a ) , ∧ , S ) , S ) ⇒ ( ( ( a , a ) , ∧ , ( T ) ) , S ) ⇒ ( ( ( a , a ) , ∧ , ( S ) ) , S ) ⇒ ( ( ( a , a ) , ∧ , ( a ) ) , S ) ⇒ ( ( ( a , a ) , ∧ , ( a ) ) , a ) S\Rightarrow (T) \\\Rightarrow (T,S) \\\Rightarrow (S,S) \\\Rightarrow ((T),S) \\\Rightarrow ((T,S),S) \\ \Rightarrow ((T,S,S),S) \\\Rightarrow ((S,S,S),S) \\\Rightarrow (((T),S,S),S) \\ \Rightarrow (((T,S),S,S),S) \\\Rightarrow (((S,S),S,S),S) \\\Rightarrow (((a,S),S,S),S) \\\Rightarrow (((a,a),S,S),S) \\\Rightarrow (((a,a),\land,S),S) \\\Rightarrow (((a,a),\land,(T)),S) \\ \Rightarrow (((a,a),\land,(S)),S) \\\Rightarrow (((a,a),\land,(a)),S) \\\Rightarrow (((a,a),\land,(a)),a) S(T)(T,S)(S,S)((T),S)((T,S),S)((T,S,S),S)((S,S,S),S)(((T),S,S),S)(((T,S),S,S),S)(((S,S),S,S),S)(((a,S),S,S),S)(((a,a),S,S),S)(((a,a),,S),S)(((a,a),,(T)),S)(((a,a),,(S)),S)(((a,a),,(a)),S)(((a,a),,(a)),a)

(((a,a),^,(a)),a)最右推导

S ⇒ ( T ) ⇒ ( T , S ) ⇒ ( T , a ) ⇒ ( S , a ) ⇒ ( ( T ) , a ) ⇒ ( ( T , S ) , a ) ⇒ ( ( T , ( T ) ) , a ) ⇒ ( ( T , ( S ) ) , a ) ⇒ ( ( T , ( a ) ) , a ) ⇒ ( ( T , S , ( a ) ) , a ) ⇒ ( ( T , ∧ , ( a ) ) , a ) ⇒ ( ( S , ∧ , ( a ) ) , a ) ⇒ ( ( ( T ) , ∧ , ( a ) ) , a ) ⇒ ( ( ( T , S ) , ∧ , ( a ) ) , a ) ⇒ ( ( ( T , a ) , ∧ , ( a ) ) , a ) ⇒ ( ( ( S , a ) , ∧ , ( a ) ) , a ) ⇒ ( ( ( a , a ) , ∧ , ( a ) ) , a ) S\Rightarrow (T) \\\Rightarrow (T,S) \\\Rightarrow (T,a) \\ \Rightarrow (S,a) \\\Rightarrow ((T),a) \\\Rightarrow ((T, S),a) \\\Rightarrow ((T, (T)),a) \\ \Rightarrow ((T, (S)),a) \\\Rightarrow ((T, (a)),a) \\\Rightarrow ((T, S, (a)),a) \\\Rightarrow ((T, \land, (a)),a) \\\Rightarrow ((S, \land, (a)),a) \\\Rightarrow (((T), \land, (a)),a) \\\Rightarrow (((T,S), \land, (a)),a) \\\Rightarrow (((T,a), \land, (a)),a) \\\Rightarrow (((S,a), \land, (a)),a) \\\Rightarrow (((a,a), \land, (a)),a) S(T)(T,S)(T,a)(S,a)((T),a)((T,S),a)((T,(T)),a)((T,(S)),a)((T,(a)),a)((T,S,(a)),a)((T,,(a)),a)((S,,(a)),a)(((T),,(a)),a)(((T,S),,(a)),a)(((T,a),,(a)),a)(((S,a),,(a)),a)(((a,a),,(a)),a)

2 (((a,a),^,(a)),a)的规范规约和句柄

规范归约/最左归约是关于是一个最右推导/规范推导的逆过程

由规范推导推出的句型称为规范句型。

于是根据前一问逆向推导得到规范规约

(例子在88页也有)

  1. ( ( ( a ‾ , a ) , ∧ , ( a ) ) , a ) (((\underline{a},a), \land, (a)),a) (((a,a),,(a)),a)
  2. ( ( ( S ‾ , a ) , ∧ , ( a ) ) , a ) (((\underline{S},a), \land, (a)),a) (((S,a),,(a)),a)
  3. ( ( ( T , a ‾ ) , ∧ , ( a ) ) , a ) (((T,\underline{a}), \land, (a)),a) (((T,a),,(a)),a)
  4. ( ( ( T , S ‾ ) , ∧ , ( a ) ) , a ) (((\underline{T,S}), \land, (a)),a) (((T,S),,(a)),a)
  5. ( ( ( T ) ‾ , ∧ , ( a ) ) , a ) ((\underline{(T)}, \land, (a)),a) (((T),,(a)),a)
  6. ( ( S ‾ , ∧ , ( a ) ) , a ) ((\underline{S}, \land, (a)),a) ((S,,(a)),a)
  7. ( ( T , ∧ ‾ , ( a ) ) , a ) ((T,\underline{\land}, (a)),a) ((T,,(a)),a)
  8. ( ( T , S ‾ , ( a ) ) , a ) ((\underline{T,S}, (a)),a) ((T,S,(a)),a)
  9. ( ( T , ( a ‾ ) ) , a ) ((T, (\underline{a})),a) ((T,(a)),a)
  10. ( ( T , ( S ‾ ) ) , a ) ((T, (\underline{S})),a) ((T,(S)),a)
  11. ( ( T , ( T ) ‾ ) , a ) ((T, \underline{(T)}),a) ((T,(T)),a)
  12. ( ( T , S ‾ ) , a ) ((\underline{T, S}),a) ((T,S),a)
  13. ( ( T ) ‾ , a ) (\underline{(T)},a) ((T),a)
  14. ( S ‾ , a ) (\underline{S},a) (S,a)
  15. ( T , a ‾ ) (T,\underline{a}) (T,a)
  16. ( T , S ‾ ) (\underline{T,S}) (T,S)
  17. ( T ) ‾ \underline{(T)} (T)
  18. S S S

栈内部的内容需要和输入串的内容一致

步骤符号栈输入串动作
0# ( ( ( a , a ) , ∧ , ( a ) ) , a ) (((a,a), \land, (a)),a) (((a,a),,(a)),a)initial
1# ( ( ( ( ( a , a ) , ∧ , ( a ) ) , a ) ((a,a), \land, (a)),a) ((a,a),,(a)),a)移进
2# ( ( (( (( ( a , a ) , ∧ , ( a ) ) , a ) (a,a), \land, (a)),a) (a,a),,(a)),a)移进
3# ( ( ( ((( ((( a , a ) , ∧ , ( a ) ) , a ) a,a), \land, (a)),a) a,a),,(a)),a)移进
4# ( ( ( a (((a (((a , a ) , ∧ , ( a ) ) , a ) ,a), \land, (a)),a) ,a),,(a)),a)移进
5# ( ( ( S (((S (((S , a ) , ∧ , ( a ) ) , a ) ,a), \land, (a)),a) ,a),,(a)),a)归约 S → a S\rightarrow a Sa
6# ( ( ( T (((T (((T , a ) , ∧ , ( a ) ) , a ) ,a), \land, (a)),a) ,a),,(a)),a)归约 T → S T\rightarrow S TS
7# ( ( ( T , (((T, (((T, a ) , ∧ , ( a ) ) , a ) a), \land, (a)),a) a),,(a)),a)移进
8# ( ( ( T , a (((T,a (((T,a ) , ∧ , ( a ) ) , a ) ), \land, (a)),a) ),,(a)),a)移进
9# ( ( ( T , S (((T,S (((T,S ) , ∧ , ( a ) ) , a ) ), \land, (a)),a) ),,(a)),a)归约 S → a S\rightarrow a Sa
10# ( ( ( T (((T (((T ) , ∧ , ( a ) ) , a ) ), \land, (a)),a) ),,(a)),a)归约 T → T , S T\rightarrow T,S TT,S
11# ( ( ( T ) (((T) (((T) , ∧ , ( a ) ) , a ) , \land, (a)),a) ,,(a)),a)移进
12# ( ( S ((S ((S , ∧ , ( a ) ) , a ) , \land, (a)),a) ,,(a)),a)规约 S → ( T ) S\rightarrow(T) S(T)
13# ( ( T ((T ((T , ∧ , ( a ) ) , a ) , \land, (a)),a) ,,(a)),a)规约 T → S T\rightarrow S TS
14# ( ( T , ((T, ((T, ∧ , ( a ) ) , a ) \land, (a)),a) ,(a)),a)移进
15# ( ( T , ∧ ((T,\land ((T, , ( a ) ) , a ) , (a)),a) ,(a)),a)移进
16# ( ( T , S ((T,S ((T,S , ( a ) ) , a ) , (a)),a) ,(a)),a)规约 S → ∧ S\rightarrow \land S
17# ( ( T ((T ((T , ( a ) ) , a ) , (a)),a) ,(a)),a)规约 T → T , S T\rightarrow T,S TT,S
18# ( ( T , ((T, ((T, ( a ) ) , a ) (a)),a) (a)),a)移进
19# ( ( T , ( ((T,( ((T,( a ) ) , a ) a)),a) a)),a)移进
20# ( ( T , ( a ((T,(a ((T,(a ) ) , a ) )),a) )),a)移进
21# ( ( T , ( S ((T,(S ((T,(S ) ) , a ) )),a) )),a)归约 S → a S\rightarrow a Sa
22# ( ( T , ( T ((T,(T ((T,(T ) ) , a ) )),a) )),a)归约 T → S T\rightarrow S TS
23# ( ( T , ( T ) ((T,(T) ((T,(T) ) , a ) ),a) ),a)移进
24# ( ( T , S ((T,S ((T,S ) , a ) ),a) ),a) S → ( T ) S\rightarrow(T) S(T)
25# ( ( T ((T ((T ) , a ) ),a) ),a) T → T , S T\rightarrow T,S TT,S
26# ( ( T ) ((T) ((T) , a ) ,a) ,a)移进
27# ( S (S (S , a ) ,a) ,a)规约 S → ( T ) S\rightarrow (T) S(T)
28# ( T (T (T , a ) ,a) ,a)规约 T → S T\rightarrow S TS
29# ( T , (T, (T, a ) a) a)移进
30# ( T , a (T,a (T,a ) ) )移进
31# ( T , S (T,S (T,S ) ) )规约 S → a S\rightarrow a Sa
32# ( T (T (T ) ) )规约 T → T , S T\rightarrow T,S TT,S
33# ( T ) (T) (T)移进
34# S S S规约 S → ( T ) S\rightarrow (T) S(T)

5

文法
S → A S ∣ b A → S A ∣ a S\rightarrow AS|b\\ A\rightarrow SA|a SASbASAa

在这里插入图片描述
如果你的起始符号不止一个产生式就得加S’,只有一个产生式可以不加

加入 S’->S

1. 所有的LR(0)项目

S ′ → ⋅ S ( 这个需要自己添加 ) S'\rightarrow \cdot S(这个需要自己添加) SS(这个需要自己添加)
S → ⋅ A S S → A ⋅ S S → A S ⋅ S\rightarrow \cdot AS\quad S\rightarrow A\cdot S\quad S\rightarrow AS \cdot SASSASSAS
S → ⋅ b S → b ⋅ S\rightarrow \cdot b \quad S\rightarrow b\cdot SbSb
A → ⋅ S A A → S ⋅ A A → S A ⋅ A\rightarrow \cdot SA\quad A\rightarrow S\cdot A\quad A\rightarrow SA \cdot ASAASAASA
A → ⋅ a A → a ⋅ A\rightarrow \cdot a \quad A\rightarrow a\cdot AaAa

2. 文法的LR(0)项目规范组和识别活前缀的DFA

I 0 I_0 I0

拿出最开始的规约 ① S ′ → ⋅ S ①S'\rightarrow \cdot S SS
找出所有满足 S → ⋅ s o m e t h i n g S\rightarrow \cdot something Ssomething的情况,根据前文有 ② S → ⋅ A S ③ S → ⋅ b ②S\rightarrow \cdot AS\quad ③S\rightarrow \cdot b SASSb, 此时注意到 S → ⋅ A S S\rightarrow \cdot AS SAS,需要再考虑所有满足 A → ⋅ s o m e t h i n g A\rightarrow \cdot something Asomething的情况 ④ A → ⋅ a ⑤ A → ⋅ S A ④A\rightarrow \cdot a\quad⑤ A\rightarrow \cdot SA AaASA

于是我们得到 I 0 I_0 I0
① S ′ → ⋅ S ② S → ⋅ A S ( 由于①获得 ) ③ S → ⋅ b ( 由于①获得 ) ④ A → ⋅ a ( 由于②获得 ) ⑤ A → ⋅ S A ( 由于②获得 ) ①S'\rightarrow \cdot S\\ ②S\rightarrow \cdot AS(由于①获得)\\ ③S\rightarrow \cdot b(由于①获得)\\ ④A\rightarrow \cdot a(由于②获得) \\ ⑤A\rightarrow \cdot SA(由于②获得) SSSAS(由于获得)Sb(由于获得)Aa(由于获得)ASA(由于获得)

I 1 I_1 I1

观察 I 0 I_0 I0数据,不难发现 ⋅ \cdot 后面接的数据有 S , A , b , a S,A,b,a S,A,b,a,所以可以在 I 0 I_0 I0的基础上状态转移,这里首先转移出S,发现 ⋅ \cdot 后接S的有 ①和⑤ ①和⑤

I 1 I_1 I1一开始
① S ′ → S ⋅ ② A → S ⋅ A ①S'\rightarrow S\cdot\\ ②A\rightarrow S\cdot A SSASA
不难发现①的dot后面没有数据了,所以无法在加项目集,观察②,dot后方为A,所以还需要加 A → ⋅ s o m e t h i n g A\rightarrow \cdot something Asomething

① S ′ → S ⋅ ② A → S ⋅ A ③ A → ⋅ a ( 由于②获得 ) ④ A → ⋅ S A ( 由于②获得 ) ①S'\rightarrow S\cdot\\ ②A\rightarrow S\cdot A\\ ③A\rightarrow \cdot a(由于②获得) \\ ④A\rightarrow \cdot SA(由于②获得) SSASAAa(由于获得)ASA(由于获得)
再根据④,考虑 S → ⋅ s o m e t h i n g S\rightarrow \cdot something Ssomething
① S ′ → S ⋅ ② A → S ⋅ A ③ A → ⋅ a ( ② ) ④ A → ⋅ S A ( ② ) ⑤ S → ⋅ A S ( ④ ) ⑥ S → ⋅ b ( ④ ) ①S'\rightarrow S\cdot\\ ②A\rightarrow S\cdot A\\ ③A\rightarrow \cdot a(②) \\ ④A\rightarrow \cdot SA(②)\\ ⑤S\rightarrow \cdot AS(④)\\ ⑥S\rightarrow \cdot b(④)\\ SSASAAa()ASA()SAS()Sb()

I 2 I_2 I2

I 0 I_0 I0从A出发,一开始
① S → A ⋅ S ① S\rightarrow A\cdot S SAS

S → ⋅ s o m e t h i n g S\rightarrow \cdot something Ssomething

② S → ⋅ A S ③ S → ⋅ b ②S\rightarrow \cdot AS\\ ③S\rightarrow \cdot b SASSb

A → ⋅ s o m e t h i n g A\rightarrow \cdot something Asomething

④ A → ⋅ a ⑤ A → ⋅ S A ④A\rightarrow \cdot a\\ ⑤A\rightarrow \cdot SA AaASA

没有新的LR(0)项目,结束 I 2 I_2 I2更新

I 3 I_3 I3

I 0 I_0 I0从a出发
A → a ⋅ A\rightarrow a\cdot Aa

I 4 I_4 I4

I 0 I_0 I0从b出发
S → b ⋅ S\rightarrow b\cdot Sb

I 5 I_5 I5

I 1 I_1 I1从a和b出发为 I 3 和 I 4 I_3和I_4 I3I4,还可以从S和A出发,这里先从S出发

① A → S ⋅ A ① A\rightarrow S\cdot A ASA
根据前面的推导,可以直接把 S → ⋅ s o m e t h i n g S\rightarrow \cdot something Ssomething A → ⋅ s o m e t h i n g A\rightarrow \cdot something Asomething放进去

① A → S ⋅ A ② A → ⋅ a ③ A → ⋅ S A ④ S → ⋅ A S ⑤ S → ⋅ b ① A\rightarrow S\cdot A \\ ②A\rightarrow \cdot a \\ ③A\rightarrow \cdot SA\\ ④S\rightarrow \cdot AS\\ ⑤S\rightarrow \cdot b\\ ASAAaASASASSb

I 6 I_6 I6

I 1 I_1 I1从A出发
① A → S A ⋅ ② S → A ⋅ S ①A\rightarrow SA\cdot\\ ②S\rightarrow A\cdot S ASASAS

根据前面的推导,可以直接把 S → ⋅ s o m e t h i n g S\rightarrow \cdot something Ssomething A → ⋅ s o m e t h i n g A\rightarrow \cdot something Asomething放进去

① A → S A ⋅ ② S → A ⋅ S ③ A → ⋅ a ④ A → ⋅ S A ⑤ S → ⋅ A S ⑥ S → ⋅ b ①A\rightarrow SA\cdot\\ ②S\rightarrow A\cdot S\\ ③A\rightarrow \cdot a \\ ④A\rightarrow \cdot SA\\ ⑤S\rightarrow \cdot AS\\ ⑥S\rightarrow \cdot b\\ ASASASAaASASASSb

I 7 I_7 I7

观察 I 2 I_2 I2,不难发现A返回自己,a变成 I 3 I_3 I3,b变成 I 4 I_4 I4,剩下S
S → A S ⋅ A → S ⋅ A S\rightarrow AS\cdot \\ A\rightarrow S\cdot A SASASA

拓展得到
① S → A S ⋅ ② A → S ⋅ A ③ A → ⋅ a ④ A → ⋅ S A ⑤ S → ⋅ A S ⑥ S → ⋅ b ①S\rightarrow AS\cdot \\ ②A\rightarrow S\cdot A\\ ③A\rightarrow \cdot a \\ ④A\rightarrow \cdot SA\\ ⑤S\rightarrow \cdot AS\\ ⑥S\rightarrow \cdot b\\ SASASAAaASASASSb

剩余的情况

经过检验 I 3 到 I 7 I_3到I_7 I3I7都无法产生新的状态,不妨写出状态转换对
< I 0 , S , I 1 > < I 0 , A , I 2 > < I 0 , a , I 3 > < I 0 , b , I 4 > < I 1 , S , I 5 > < I 1 , A , I 6 > < I 1 , a , I 3 > < I 1 , b , I 4 > < I 2 , S , I 7 > < I 2 , A , I 2 > < I 2 , a , I 3 > < I 2 , b , I 4 > < I 5 , S , I 5 > < I 5 , A , I 6 > < I 5 , a , I 3 > < I 5 , b , I 4 > < I 6 , S , I 7 > < I 6 , A , I 2 > < I 6 , a , I 3 > < I 6 , b , I 4 > < I 7 , S , I 5 > < I 7 , A , I 6 > < I 7 , a , I 3 > < I 7 , b , I 4 > <I_0,S,I_1>\quad <I_0,A,I_2> \quad <I_0,a,I_3>\quad <I_0,b,I_4>\\ <I_1,S,I_5>\quad <I_1,A,I_6> \quad <I_1,a,I_3>\quad <I_1,b,I_4>\\ <I_2,S,I_7>\quad <I_2,A,I_2> \quad <I_2,a,I_3>\quad <I_2,b,I_4>\\ <I_5,S,I_5>\quad <I_5,A,I_6> \quad <I_5,a,I_3>\quad <I_5,b,I_4>\\ <I_6,S,I_7>\quad <I_6,A,I_2> \quad <I_6,a,I_3>\quad <I_6,b,I_4>\\ <I_7,S,I_5>\quad <I_7,A,I_6> \quad <I_7,a,I_3>\quad <I_7,b,I_4> <I0,S,I1><I0,A,I2><I0,a,I3><I0,b,I4><I1,S,I5><I1,A,I6><I1,a,I3><I1,b,I4><I2,S,I7><I2,A,I2><I2,a,I3><I2,b,I4><I5,S,I5><I5,A,I6><I5,a,I3><I5,b,I4><I6,S,I7><I6,A,I2><I6,a,I3><I6,b,I4><I7,S,I5><I7,A,I6><I7,a,I3><I7,b,I4>

图如下

在这里插入图片描述

3. 是否为SLR?是则列出SLR分析表

首先如何判断?

  1. 看所有移进项目,点后面跟的终结符作为一个集合
  2. 找到所有规约项目,每个规约项目的左半部分构造FOLLOW
  3. 要求1这个集合与2创造出的所有集合两两相交为空

I 1 , I 6 , I 7 I_1,I_6,I_7 I1,I6,I7有移进规约冲突

针对 I 1 I_1 I1

S ′ → S ⋅ ( 规约 ) A → ⋅ a ( 移进 ) S → ⋅ b ( 移进 ) S'\rightarrow S\cdot (规约)\\ A\rightarrow \cdot a (移进)\\ S\rightarrow \cdot b (移进) SS(规约)Aa(移进)Sb(移进)
可以考虑 F O L L O W ( S ′ ) = { # } FOLLOW(S') = \{\#\} FOLLOW(S)={#},不包含 a 或 b.
A C T I O N ( 1 , # ) = a c c ACTION(1,\#) = acc ACTION(1,#)=acc解决

I 6 I_6 I6
A → S A ⋅ ( 规约 ) A → ⋅ a ( 移进 ) S → ⋅ b ( 移进 ) A\rightarrow SA\cdot(规约)\\ A\rightarrow \cdot a (移进)\\ S\rightarrow \cdot b (移进) ASA(规约)Aa(移进)Sb(移进)

此时考察规约项目 A → S A ⋅ A\rightarrow SA\cdot ASA,查看 F O L L O W ( A ) = { a , b } FOLLOW(A) = \{a,b\} FOLLOW(A)={a,b},而后续跟的是终结符 # \# #,无法用SLR解决

I 6 I_6 I6

S → A S ⋅ ( 规约 ) A → ⋅ a ( 移进 ) S → ⋅ b ( 移进 ) S\rightarrow AS\cdot (规约)\\ A\rightarrow \cdot a (移进)\\ S\rightarrow \cdot b (移进) SAS(规约)Aa(移进)Sb(移进)

考虑规约项目 S → A S ⋅ S\rightarrow AS\cdot SAS
F O L L O W ( S ) = { # , a , b } FOLLOW(S) = \{\#,a,b\} FOLLOW(S)={#,a,b}
同理无法用SLR解决

综上,不是SLR文法

4. 是否为LALR或LR(1)

先构造出拓广文法

S ′ → S S → A S S → b A → S A A → a S'\rightarrow S\\ S\rightarrow AS\\ S\rightarrow b\\ A \rightarrow SA\\ A \rightarrow a SSSASSbASAAa

I 0 I_0 I0

首先先将最初始的 S ′ → ⋅ S S'\rightarrow \cdot S SS放入,由于S后方为空串,所以这里应该为
① S ′ → ⋅ S , # ① S'\rightarrow \cdot S,\# SS,#
现在由于右边为 ⋅ S \cdot S S,我们需要把S有关的产生式都放入内部 S → A S S → b S\rightarrow AS\quad S\rightarrow b SASSb, 注意到这两个产生式是源于的,①的展望串为#,所以② ③的展望串接着S

② S → ⋅ A S , # ③ S → ⋅ b , # ② S\rightarrow \cdot AS,\#\\ ③ S\rightarrow \cdot b,\# SAS,#Sb,#

观察到②的点后为A,A的后方为S,这说明,我们需要将 A A A有关的产生式放进来,并且展望串应该等价于 F I R S T ( S ) = { a , b } FIRST(S) = \{a,b\} FIRST(S)={a,b}

A → ⋅ S A , a A → ⋅ S A , b A → ⋅ a , a A → ⋅ a , b A\rightarrow \cdot SA, a \\ A\rightarrow \cdot SA, b \\ A\rightarrow \cdot a, a \\ A\rightarrow \cdot a, b \\ ASA,aASA,bAa,aAa,b
合并成为
④ A → ⋅ S A , a / b ⑤ A → ⋅ a , a / b ④A\rightarrow \cdot SA, a/b \\ ⑤A\rightarrow \cdot a, a/b \\ ASA,a/bAa,a/b

根据④我们又可以重新考虑 S S S的产生式,并且由于这是因为④引入的产生式,我们要将 F I R S T ( A ) = { a , b } FIRST(A) = \{a,b\} FIRST(A)={a,b}作为展望串
S → ⋅ A S , a / b S → ⋅ b , a / b S\rightarrow \cdot AS,a/b\\ S\rightarrow \cdot b,a/b SAS,a/bSb,a/b
与② ③合并得到 I 0 I_0 I0

① S ′ → ⋅ S , # ② S → ⋅ A S , # / a / b ③ S → ⋅ b , # / a / b ④ A → ⋅ S A , a / b ⑤ A → ⋅ a , a / b ① S'\rightarrow \cdot S,\# \\ ②S\rightarrow \cdot AS,\#/a/b\\ ③S\rightarrow \cdot b,\#/a/b\\ ④A\rightarrow \cdot SA, a/b \\ ⑤A\rightarrow \cdot a, a/b \\ SS,#SAS,#/a/bSb,#/a/bASA,a/bAa,a/b

I 1 I_1 I1

I 0 I_0 I0出发,识别S

① S ′ → S ⋅ , # ② A → S ⋅ A , a / b ① S'\rightarrow S\cdot,\# \\ ②A\rightarrow S\cdot A, a/b \\ SS,#ASA,a/b
显然①没有啥能拓展的,考虑②,需要考虑所有A的产生式,且展望式包括a,b,并且A后方没有数字了,这时候展望串直接继承a/b

③ A → ⋅ S A , a / b ④ A → ⋅ a , a / b ③A\rightarrow \cdot SA, a/b \\ ④A\rightarrow \cdot a, a/b \\ ASA,a/bAa,a/b

再考虑S的产生式 —— 由于S后方为A,不能直接继承③的展望式,而是FIRST(A)作为展望式 (虽然没区别但是本质不太一样)

⑤ S → ⋅ A S , a / b ⑥ S → ⋅ b , a / b ⑤S\rightarrow \cdot AS, a/b\\ ⑥S\rightarrow\cdot b, a/b SAS,a/bSb,a/b
考虑⑤,发现新产生的式子和③④一致,结束

I 2 I_2 I2

I 0 I_0 I0出发,识别A

① S → A ⋅ S , # / a / b ① S\rightarrow A\cdot S, \#/a/b SAS,#/a/b

S的产生式(①的S后面没有数据,直接继承它的展望式)
② S → ⋅ A S , # / a / b ③ S → ⋅ b , # / a / b ②S\rightarrow \cdot AS, \#/a/b\\ ③S\rightarrow\cdot b, \#/a/b SAS,#/a/bSb,#/a/b

A的产生式由于③被纳入,且A后接着S,展望式为,FIRST(S)

④ A → ⋅ S A , a / b ⑤ A → ⋅ a , a / b ④A\rightarrow \cdot SA, a/b \\ ⑤A\rightarrow \cdot a, a/b \\ ASA,a/bAa,a/b

I 3 I_3 I3

I 0 I_0 I0识别 a

A → a ⋅ , a / b A\rightarrow a\cdot, a/b Aa,a/b

I 4 I_4 I4

I 0 I_0 I0识别 b

S → b ⋅ , a / b S\rightarrow b\cdot, a/b Sb,a/b

依次类推

得到下图
在这里插入图片描述

其中 I 6 I_6 I6 A → S A ⋅ , a / b A\rightarrow SA\cdot, a/b ASA,a/b要求输入a或b的时候使用 A → S A 规约 A\rightarrow SA规约 ASA规约

但是 S → ⋅ b , a / b A → ⋅ a , a / b S\rightarrow \cdot b, a/b\quad A\rightarrow \cdot a, a/b Sb,a/bAa,a/b要求移进,冲突,所以不是 L R ( 1 ) LR(1) LR(1)文法

证明下面的文法SLR(1) 不是LR(0)

S → A A → A b ∣ b B a B → a A c ∣ a ∣ a A b S\rightarrow A\\ A\rightarrow Ab|bBa\\ B\rightarrow aAc|a|aAb SAAAbbBaBaAcaaAb

在这里插入图片描述

状态2存在 移进规约冲突(点·的前方完全一样,后缀不一样)
S → A ⋅ A → A ⋅ b S\rightarrow A\cdot \\ A\rightarrow A\cdot b SAAAb

状态5存在 移进规约冲突(点·的前方完全一样,后缀不一样)
B → a ⋅ A c B → a ⋅ B → a ⋅ A b B\rightarrow a\cdot Ac \\ B\rightarrow a\cdot \\ B\rightarrow a\cdot Ab BaAcBaBaAb

状态9存在规约规约冲突(点的前方的后缀(完全/部分)相同)

B → a A b ⋅ A → A b ⋅ B\rightarrow aAb\cdot \\ A\rightarrow Ab\cdot BaAbAAb

所以他不是LR0文法

对于 I 2 I_2 I2

F O L L O W ( S ) = { # } 我们有 F O L L O W ( S ) ∩ { b } = ∅ 可以令 A C T I O N ( 2 , # ) = r 1 , A C T I O N ( 2 , b ) = S 6 FOLLOW(S) = \{\#\}我们有FOLLOW(S)\cap \{b\} = \empty \quad 可以令ACTION(2,\#) = r_1, ACTION(2,b) = S_6 FOLLOW(S)={#}我们有FOLLOW(S){b}=可以令ACTION(2,#)=r1,ACTION(2,b)=S6

I 5 I_5 I5

F O L L O W ( B ) = { a } 显然他和 { ϵ } 交集为 ∅ , 令 A C T I O N ( 5 , a ) = r 5 FOLLOW(B) = \{a\}显然他和\{\epsilon\}交集为\empty, 令ACTION(5,a) = r_5 FOLLOW(B)={a}显然他和{ϵ}交集为,ACTION(5,a)=r5

I 9 I_9 I9

需要考虑产生式A和B
F O L L O W ( A ) = { # , b , c } FOLLOW(A) = \{\#,b,c\} FOLLOW(A)={#,b,c}

F O L L O W ( A ) ∪ F O L L O W ( B ) = ∅ FOLLOW(A)\cup FOLLOW(B) = \empty FOLLOW(A)FOLLOW(B)=

得到SLR(1)分析表

ACTIONGOTO
abc#AB
0S21
1S3ACC
2S54
3R1R1R1
4S6
5R4S27
6R2R2R2
7S9S8
8R5
9R5R1R1R1

没重复定义,为SLR1文法

addition

拓广文法

S ′ → S S → i C t S S → i C t S e S S → a C → b S'\rightarrow S\\ S\rightarrow iCtS \\ S \rightarrow iCtSeS \\ S \rightarrow a \\ C \rightarrow b SSSiCtSSiCtSeSSaCb

LR0规范族

I 0 I_0 I0
S ′ → ⋅ S S → ⋅ i C t S S → ⋅ i C t S e S S → ⋅ a S'\rightarrow \cdot S\\ S\rightarrow \cdot iCtS \\ S \rightarrow \cdot iCtSeS \\ S \rightarrow \cdot a SSSiCtSSiCtSeSSa

I 1 I_1 I1
S ′ → S ⋅ S'\rightarrow S\cdot SS

I 2 I_2 I2

S ′ → a ⋅ S'\rightarrow a\cdot Sa

I 3 I_3 I3

S → i ⋅ C t S S → i ⋅ C t S e S C → ⋅ b S\rightarrow i\cdot CtS \\ S \rightarrow i\cdot CtSeS \\ C \rightarrow \cdot b SiCtSSiCtSeSCb

I 4 I_4 I4
C → b ⋅ C \rightarrow b \cdot Cb

I 5 I_5 I5

S → i C ⋅ t S S → i C ⋅ t S e S S\rightarrow i C\cdot tS \\ S \rightarrow i C\cdot tSeS \\ SiCtSSiCtSeS

I 6 I_6 I6

S → i C t ⋅ S S → i C t ⋅ S e S S → ⋅ i C t S S → ⋅ i C t S e S S → ⋅ a S\rightarrow i C t\cdot S \\ S \rightarrow i C t \cdot SeS \\ S\rightarrow \cdot iCtS \\ S \rightarrow \cdot iCtSeS \\ S \rightarrow \cdot a SiCtSSiCtSeSSiCtSSiCtSeSSa

I 7 I_7 I7

S → i C t S ⋅ S → i C t S ⋅ e S S\rightarrow i C t S\cdot \\ S \rightarrow i C t S\cdot eS SiCtSSiCtSeS

I 8 I_8 I8
S → i C t S e ⋅ S S → ⋅ i C t S S → ⋅ i C t S e S S → ⋅ a S \rightarrow i C t S e\cdot S S\rightarrow \cdot iCtS \\ S \rightarrow \cdot iCtSeS \\ S \rightarrow \cdot a SiCtSeSSiCtSSiCtSeSSa

I 9 I_9 I9
S → i C t S e S ⋅ S \rightarrow i C t S e S\cdot SiCtSeS

在这里插入图片描述

ACTIONGOTO
iteab#SC
0s3s21
0acc
2r3r3r3r3r3r3
3s45
4r4r4r4r4r4r4
5s6
6s3s27
7r1r1s8r1r1r1
8s3s29
9r2r2r2r2r2r2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/451964.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

这份最新阿里、腾讯、华为、字节等大厂的薪资和职级对比,你看过没?

互联网大厂新入职员工各职级薪资对应表(技术线)~ 最新阿里、腾讯、华为、字节跳动等大厂的薪资和职级对比 上面的表格不排除有很极端的收入情况&#xff0c;但至少能囊括一部分同职级的收入。这个表是“技术线”新入职员工的职级和薪资情况&#xff0c;非技术线(如产品、运营、…

pbootcms自动配图出图插件

pbootcms文章无图自动出图配图插件的优点 1、提高文章的可读性和吸引力&#xff1a;插入图片可以丰富文章的内容和形式&#xff0c;增强读者的阅读体验和吸引力&#xff0c;提高文章的点击率和转化率。 2、节省时间和精力&#xff1a;手动添加图片需要花费大量时间和精力去寻找…

【LeetCode: 1416. 恢复数组 | 暴力递归=>记忆化搜索=>动态规划 】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

【花雕学AI】超级提问模型大全!150个ChatGPT神奇示例,让你的聊天更有趣!

引言 你是否想要成为聊天高手&#xff0c;让你的对话更加有趣和深入&#xff1f;你是否想要掌握一些超级提问模型&#xff0c;让你的聊天更加有创意和挑战&#xff1f;你是否想要借助人工智能的力量&#xff0c;生成一些适合你的超级提问模型&#xff1f; 如果你的答案是肯定…

浅谈新能源电动汽与汽车传感器充电桩的影响

安科瑞 徐浩竣 江苏安科瑞电器制造有限公司 zx acrelxhj 摘要&#xff1a;随着我国能源战略发展以及低碳行动的实施&#xff0c;电动汽车已逐步广泛应用&#xff0c;而电动汽车的应用非常符合当今社会对环保意识的要求&#xff0c;以及有效节省化石燃料的消耗。由于其无污染…

Flutter+YesAPI 快速构建零运维的APP

前言 移动互联网经过多年的发展&#xff0c;已经进入一个成熟的阶段&#xff0c;几乎每个公司都有自己的移动应用程序或移动网站。随着5G技术的不断发展&#xff0c;也带来了更高效的数据传输速度和更稳定的网络连接&#xff0c;这使得更多的应用程序和服务能够在互联网上运行&…

NFT介绍及监管规则

什么是NFT NFT是Non-Fungible Token&#xff08;非同质化代币&#xff09;的缩写。 NFT是“Non-Fungible Token”的缩写&#xff0c;即非同质化代币。不同于FT&#xff08;Fungible Token&#xff0c;同质化代币&#xff09;&#xff0c;每一个NFT都是独一无二且不可相互替代的…

cmake管理子程序,lib库和so库应用实践

cmake在管理大型项目时经常被用到&#xff0c;本文以简单程序演示来说明camke管理项目应用&#xff0c;其中包括主程序&#xff0c;子程序&#xff0c;so库程序&#xff0c;lib程序。 目录 1.程序目录结构 2.编译执行 3.清除临时文件 4.完整代码 1.程序目录结构 ├── bu…

【PWN刷题__ret2text】[BJDCTF 2020]babystack

新手上路~低速慢行~ 目录 前言 1. checksec 2. IDA 反汇编 3. payload编写 4. exp编写 5. pwntools用法 前言 作为pwn新手&#xff0c;尽可能在刷题中&#xff0c;记录、学习一些通用的知识点&#xff0c;因此wp是少不了的。 本题是一道简单的ret2text 1. checksec 没有…

6.2 龙格—库塔法

学习目标&#xff1a; 学习龙格-库塔法的具体明确的学习目标可以有以下几点&#xff1a; 理解龙格-库塔法的基本思想和原理&#xff1a;我们应该了解龙格-库塔法的数值求解思想和数值误差的概念&#xff0c;包括截断误差和稳定性等基本概念&#xff0c;并且要熟悉龙格-库塔法的…

大学生无线耳机怎么选?内行推荐四款高性价比蓝牙耳机

随着蓝牙耳机的使用频率越来越高&#xff0c;大学生成为了蓝牙耳机的主要用户群体之一。最近看到很多网友问&#xff0c;大学生无线耳机怎么选&#xff1f;针对这个问题&#xff0c;我来给大家推荐几款高性价比蓝牙耳机&#xff0c;一起来看看吧。 一、南卡小音舱Lite2蓝牙耳机…

MIMO-OFDM系统中信道估计的快速谐波搜索技术(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 目前,由OFDM技术与空时编码技术相融合而成的MIMO-OFDM技术已经引起了通信领域的广泛关注和研究.在无线通信系统中,MIMO-OFDM技…

11. 图的入门

11. 图的入门 11.1 图的实际应用&#xff1a; ​ 在现实生活中&#xff0c;有许多应用场景会包含很多点以及点点之间的连接&#xff0c;而这些应用场景我们都可以用即将要学习的图这种数据结构去解决。 地图&#xff1a; ​ 我们生活中经常使用的地图&#xff0c;基本上是由…

关于函数栈帧的创建与销毁和可变参数列表

目录 1. 深刻理解函数调用过程1.1 基本概念1.2 函数栈帧的创建于销毁1.2.1 栈帧创建1.2.2 栈帧销毁1.2.3 有趣的现象 2. 了解可变参数列表的使用与原理2.1 可变参数列表与函数栈帧的关系2.2 宏的工作过程2.3 宏的具体实现原理 1. 深刻理解函数调用过程 1.1 基本概念 关于函数…

VBA智慧办公9——图例控件教程

如图&#xff0c;利用VBA进行可视化交互界面的设计&#xff0c;在界面中我们用到了label&#xff0c;button&#xff0c;text&#xff0c;title等多个工具&#xff0c;在进行框图效果的逐一实现后可进行相应的操作和效果实现。 VBA&#xff08;Visual Basic for Applications&a…

家用洗地机要怎么选?平价洗地机推荐

国内大多数家庭比较注重地面清洁&#xff0c;不仅是要扫的干净&#xff0c;更要拖的干净&#xff0c;尤其追求地板锃亮的视觉效果&#xff0c;因此家用洗地机因其清洁效率高、能吸除干湿垃圾以及自清洁拖布等优点&#xff0c;成为很多家庭用于替代扫帚拖把等传统清洁工具的清洁…

可视化Echarts 柱状图、饼状图、折线图的设置

柱状图 饼状图 折线图 柱状图 基本的柱状图设置 <template> <div ref"ec" id"ec"></div> </template><script> import * as echarts from "echarts"; //引用echartsexport default {mounted(){let mc ech…

【网络安全】CVE 漏洞分析以及复现

漏洞详情 Shiro 在路径控制的时候&#xff0c;未能对传入的 url 编码进行 decode 解码&#xff0c;导致攻击者可以绕过过滤器&#xff0c;访问被过滤的路径。 漏洞影响版本 Shiro 1.0.0-incubating 对应 Maven Repo 里面也有 【一一帮助安全学习&#xff0c;所有资源获取一一…

onnx手动操作001

使用onnx.helper可以进行onnx的制造组装操作&#xff1a; 对象描述ValueInfoProto 对象张量名、张量的基本数据类型、张量形状算子节点信息 NodeProto算子名称(可选)、算子类型、输入和输出列表(列表元素为数值元素)GraphProto对象用张量节点和算子节点组成的计算图对象ModelP…

王道计组(23版)3_存储系统

概述 RAM&#xff1a;随机存储器&#xff0c;任一个存储单元可以随机存取&#xff0c;易失。用作主存(DRAM)或Cache(SRAM) ROM&#xff1a;只读存储器&#xff0c;可随机读出&#xff0c;写入较慢&#xff0c;需刷新&#xff0c;非易失。Flash、SSD固态硬盘、U盘 _____SSD&…