当前位置:网站首页>ZUCC_编译语言原理与编译_实验04 语言与文法

ZUCC_编译语言原理与编译_实验04 语言与文法

2022-06-24 06:59:00 星星不想卷

编译语言原理与编译实验报告

课程名称编程语言原理与编译
实验项目语言与文法

实验目的

  • 了解文法的历史
  • 理解产生式规则
  • 掌握最左推导,最右推导
  • 掌握文法的二义性
  • 掌握文法的分类与层次

实验内容

一、阅读课件完成课后习题

1、给出语言 L2={a^n b^m| m≥n≥1} 的文法

P 1 : S → A B A → a A b ∣ a b B → b B ∣ ε P_{1}:S\to AB\\ A\to aAb\mid ab\\ B\to bB\mid \varepsilon P1:SABAaAbabBbBε

2、给出语言 L1={a^(2n+1)|n≥0} 的文法

P 2 : A → a A a ∣ a P_{2}:A\to aAa\mid a P2:AaAaa

3、给出语言L3={a^n b^m c^k| n,m,k≥0}的文法

P 3 : S → A B C A → A A ∣ a ∣ ε B → B B ∣ b ∣ ε C → C C ∣ c ∣ ε P_{3}:S\to ABC\\ A\to AA\mid a\mid \varepsilon \\ B\to BB\mid b\mid \varepsilon \\ C\to CC\mid c\mid \varepsilon \\ P3:SABCAAAaεBBBbεCCCcε

4、写一个文法,使其语言是正偶数的集合,每个偶数不以0开头

P 4 : S → N N → 2 ∣ 4 ∣ 6 ∣ 8 ∣ N M M → 0 ∣ 2 ∣ 4 ∣ 6 ∣ 8 P_{4}:S\to N \\ N\to 2\mid 4\mid 6\mid 8\mid NM \\ M\to 0\mid 2\mid 4\mid 6\mid 8 P4:SNN2468NMM02468

5、给出语言L={1^n 0^m 1^m 0^n | n,m≥0}的文法

P 5 : S → 1 S 0 ∣ 0 A 1 ∣ ε A → 0 A 1 ∣ ε P_{5}:S\to 1S0\mid 0A1\mid \varepsilon \\ A\to 0A1\mid \varepsilon P5:S1S00A1εA0A1ε

6、给出语言L={ WaW^t | W∈{0|1}* },其中W^t表示W的逆的文法

P 6 : S → a ∣ 0 S 0 ∣ 1 S 1 P_{6}:S\to a\mid 0S0\mid 1S1 P6:Sa0S01S1

7、文法G[A]=({A},{a,b},{A→bA | a}, A) 所生成的语言是什么?

L ( G [ A ] ) = { b n a ∣ n ≥ 0 } L(G[A])=\left \{ b^{n} a\mid n\ge 0 \right \} L(G[A])={ bnan0}

8、文法G[N]为:

N → N D ∣ D D → 0 ∣ 1 ∣ 2 ∣ 3 ∣ 4 ∣ 5 ∣ 6 ∣ 7 ∣ 8 ∣ 9 N\to ND\mid D\\ D\to 0\mid 1\mid 2\mid 3\mid 4\mid 5\mid 6\mid 7\mid 8\mid 9 NNDDD0123456789

(1) G[N]所生成的语言是什么?

L ( G [ A ] ) = { α ∣ α 为 数 字 串 } L(G[A])=\left \{ \alpha \mid \alpha 为数字串 \right \} L(G[A])={ αα}

(2) 给出句子0127的最左、最右推导。

最左推导
N * N D * N D D * N D D D * D D D D * 0 D D D * 01 D D * 012 D * 0127 N\Longrightarrow ND\Longrightarrow NDD\Longrightarrow NDDD\Longrightarrow DDDD\Longrightarrow 0DDD\Longrightarrow 01DD\Longrightarrow 012D\Longrightarrow 0127 N*ND*NDD*NDDD*DDDD*0DDD*01DD*012D*0127
最右推导
N * N D * N 7 * N D 7 * N 27 * N D 27 * N 127 * D 127 * 0127 N\Longrightarrow ND\Longrightarrow N7\Longrightarrow ND7\Longrightarrow N27\Longrightarrow ND27\Longrightarrow N127\Longrightarrow D127\Longrightarrow 0127 N*ND*N7*ND7*N27*ND27*N127*D127*0127

9、已知文法G[S]=( {A,B},{a,b,c,d}, P, S ) , 其中 P 为:

S → A B A → a A b ∣ a b B → c B d ∣ c d S\to AB\\ A\to aAb\mid ab\\ B\to cBd\mid cd SABAaAbabBcBdcd

该文法 所生成的语言是什么?
L ( G [ S ] ) = { a n b n c m d m ∣ n , m ≥ 1 } L(G[S])=\left \{ a^{n}b^{n}c^{m}d^{m}\mid n,m \ge 1\right \} L(G[S])={ anbncmdmn,m1}

10、已知文法G[E]:

E → E + T ∣ E − T ∣ T T → T ∗ F ∣ T / F ∣ F F → ( E ) ∣ i E\to E+T\mid E-T\mid T\\ T\to T*F\mid T/F\mid F\\ F\to (E)\mid i EE+TETTTTFT/FFF(E)i

证明 E+T*F 是它的一个句型,指出这个句型的短语、直接短语和句柄
E * E + T * E + T ∗ F 短 语 : E + T ∗ F 、 T ∗ F 直 接 短 语 : T ∗ F 句 柄 : T ∗ F E\Longrightarrow E+T\Longrightarrow E+T*F\\\\ 短语:E+T*F、T*F\\ 直接短语:T*F\\ 句柄:T*F E*E+T*E+TF:E+TFTF:TF:TF

11、已知文法G[S]:

S → ( A S ) ∣ ( b ) A → ( S a A ) ∣ ( a ) S\to (AS)\mid (b)\\ A\to (SaA)\mid (a) S(AS)(b)A(SaA)(a)

试找出符号串(a)和(A((SaA)(b)))的短语﹑直接短语和句柄(如果有的话)

  • 符号串(a))不是文法的句型,因此它没有短语﹑直接短语和句柄

  • S * ( A S ) * ( A ( A S ) ) * ( A ( A ( b ) ) ) * ( A ( ( S a A ) ( b ) ) ) 短 语 : ( A ( ( S a A ) ( b ) ) ) 、 ( ( S a A ) ( b ) ) 、 ( S a A ) 、 ( b ) 直 接 短 语 : ( S a A ) 、 ( b ) 句 柄 : ( S a A ) S\Longrightarrow (AS)\Longrightarrow (A(AS))\Longrightarrow (A(A(b)))\Longrightarrow (A((SaA)(b)))\\\\ 短语:(A((SaA)(b)))、((SaA)(b))、(SaA)、(b)\\ 直接短语:(SaA)、(b)\\ 句柄:(SaA) S*(AS)*(A(AS))*(A(A(b)))*(A((SaA)(b))):(A((SaA)(b)))((SaA)(b))(SaA)(b)(SaA)(b)(SaA)

12、设有文法G[S]: S→iSeS| iS | i,试证明文法G[S]有二义性。

image-20220406004643958

13、设有文法G[N]:

N → S E ∣ E S → S D ∣ D E → 0 ∣ 2 ∣ 4 ∣ 6 ∣ 8 ∣ 10 D → 0 ∣ 1 ∣ 2 ∣ 3 ∣ 4 ∣ 5 ∣ 6 ∣ 7 ∣ 8 ∣ 9 N\to SE\mid E\\ S\to SD\mid D\\ E\to 0\mid 2\mid 4\mid 6\mid 8\mid 10\\ D\to 0\mid 1\mid 2\mid 3\mid 4\mid 5\mid 6\mid 7\mid 8\mid 9 NSEESSDDE0246810D0123456789

(1)试证明文法G[N]有二义性。

image-20220406005019587

(2)此文法所描述的语言是什么?

该文法所描述的语言是所有无符号偶数的集合(可以0开头)。

(3)试写出另一文法G’使L(G’)=L(G)且G’是无二义性的

N → S E ∣ E S → S D ∣ D E → 0 ∣ 2 ∣ 4 ∣ 6 ∣ 8 D → 0 ∣ 1 ∣ 2 ∣ 3 ∣ 4 ∣ 5 ∣ 6 ∣ 7 ∣ 8 ∣ 9 N\to SE\mid E\\ S\to SD\mid D\\ E\to 0\mid 2\mid 4\mid 6\mid 8\\ D\to 0\mid 1\mid 2\mid 3\mid 4\mid 5\mid 6\mid 7\mid 8\mid 9 NSEESSDDE02468D0123456789

二、阅读教材了解直线式语言SPL

代码与文法的对应关系

将代码等价转换为树形结构来描述,只注重语句和表达式,形成了直线式程序。

文法的产生式规则

扫描 2022年4月6日 01.20

与type 类型定义的关系

可以将文法直接翻译成数据结构的定义,其中每个文法符号对应这个数据结构中的一个typedef,例如:

扫描 2022年4月6日 01.23

而其中的A_stm其实是一个结构体。

与解释器interp的关系

通过解释器,利用构造器来解释执行语言,并对其环境、抽象语法、树数据结构的递归性予以展示。

三、参考简单语言解释器 Naive.fs 代码,尝试写出其文法

image-20220406022253377

四、下面文法生成的语言分别是什么

G1 : S-> AB
    A -> aA|ε
    B->bc|bBc

G2: S ->aA|a
    A ->aS

G1:任意a个字符(包括0个)后跟着n个b和c,n至少为1

G2:任意奇数个a(至少一个)组成的字符串

原网站

版权声明
本文为[星星不想卷]所创,转载请带上原文链接,感谢
https://blog.csdn.net/OwemShu/article/details/125377648