语法分析之自顶向下包含语法分析程序代码

这里解答的语法分析题是以此链接中的实验二为背景:语法分析实验

1.有文法:

  •  E->E+T|E-T|T
  •  T->T*F|T/F|F
  •   F->i            

2.通过该文法实现对句子(如:12+33/3*3-45)进行语法分析,若有错则指出哪一个有错。

       首先我们需要知道该文法的作用,总的来说就是句子(12+33/3*3-45)与文法进行匹配,若句子都能匹配上文法则说明没错。若有错则需要指出即可,而如何匹配呢?

       首先题目已经指出该语法分析是通过自顶向下(自顶向下包含多种方法如LL1方法等),这里若想要实现该程序,有如下:

       第一步:消除左递归,这里是直接递归的文法,直接运用套路

                     若有文法:X->XY|Z

                     则有:X->ZX'

                               X'->YX'|E (E代码空)

                  故而这里消除左递归后的文法有:

                  E->TE

                  E’->+TE’|-TE’|ε

                 T->FT’

                 T’->*FT’|/FT’|ε

                  F->i

          第二步:词法分析默认已经完成了,到这里就ok了,就按照上面消除递归后的文法进行编写语法分析程序即可。

           这里给出一个错误的句子(如12+-23/23-33*33)这里面很明显错了一个“+”,因为按照文法来看不能同时两个算符连在一起。而这里“+-“中的”-“很明显是不符合文法的,因为根据E’->+TE’,加号“+”后跟着的是T,而T后面跟着的T->FT',而F->i故而在+后应该跟着的是数字i故而出错了。

           这里给出词法分析语法分析的结合c++程序:程序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值