编译原理:理解文法和语文

1.理解符号串与集合运算。

  L={A,B, … ,Z,a,b, … ,z}

  D={0,1, … ,9}

说明下表示的含义:

  LUD         :全部字母和数字的集合

  LD         :由一个字母后跟一个数字组成的所有符号串的集合

  L4         :由4个字母组成的所有符号串的集合

  L*            :由字母组成的所有符号串(包括∑)的集合

  D+           :由一个或若干个数字组成的所有符号串的集合

  L(LUD)*  :以字母开头,后跟字母、数字组成的所有符号串的集合

 

2.文法G(Z):Z->aZb|ab定义的是什么样的语言?

解析:

  产生式:Z->aZb, Z->ab       >>可以推导出: Z=>ab, Z=>aZb=>a²b²

  重复使用产生式:Z->aZb    >>得 :                 Z=>aZb=>a²Zb²...=>aⁿ﹣¹Zbⁿ﹣¹=>aⁿbⁿ

  所以语言为L(G[Z])={aⁿbⁿ|n≥1}

 

3.写出教材22页例2.2中标识符的文法四元组形式(VN,NT,P,S)。

解析:

  有文法 G=(VN,VT,P,S),设L为标识符,D为字母,H为数字

       VN={L,D,H},VT={a,b,c,...,x,y,z,0,1,2,...,9}

         P= {<L>-><D>

       <L>-><L><D>

       <L>-><L><H>

            {<D>-><a>}

            {<D>-><b>}

       ┊

            {<D>-><z>}

            {<H>-><0>}

            {<H>-><1>}

       ┊

          {<H>-><9>}

     S=<L>

 

4.写出下列表达式的最左推导、最右推导。

G(E):

E=> E + T | T

T=>T * F | F

F=>(E)| i

  • i*i+i
  • i+i*i
  • i+(i+i)

 注意观察最左和最右推导过程的不同。

解析:

最左推导:
从文法的起始符号开始:
  E -> E + T
      -> T + T
      -> F + T
      -> i + T
      -> i + T * F
      -> i + F * F
      -> i + i * F
      -> i + i * i
最右推导:
从文法的开始符号开始:
  E -> E + T
     -> E + T * F
     -> E + T * i
     -> E + F * i
     -> E + i * i
     -> T + i * i
     -> F + i * i
     -> i + i * i

posted @ 2019-09-11 21:07  琴时  阅读(340)  评论(0编辑  收藏  举报