LL(1)文法的判断,递归下降分析程序

摘要:
=因此G不是LL文法。G消除左递归后文法G‘:E-˃TE‘E‘-˃+TE‘|εT-˃FT‘T‘-˃*FT‘|εF-˃|iSelect=First={+}Select=∪Follow(E‘)={),ε}Select=First={*}Select=∪Follow(T‘)={ε,+,)}Select=First((E))={(}Select(F-˃i)=First(i)={i}∵Select(E‘-˃+TE‘)∩Select(E‘-˃ε)=Select(T‘-˃*FT‘)∩Select(T‘-˃ε)=Select(F-˃(E))∩Select(F-˃i)=∴文法G‘(s)是LL(1)文法。3.接2,如果是LL(1)文法,写出它的递归下降语法分析程序代码。E(){T();E'();}E'()T()T'()F()4.加上实验一的词法分析程序,形成可运行的语法分析程序,分析任意输入的符号串是不是合法的表达式。

1. 文法G(S):

(1)S-> AB

(2)A ->Da|ε

(3)B-> cC

(4)C-> aADC|ε

(5)D-> b|ε

验证文法G(S)是不是LL(1)文法?

First(Da)={b,a} First(ε)={ε} First(aADC)={a} First(b)={b}

Follow(A)={c,b,a,#} Follow(C)={#} Follow(D)={a,#}

SELECT(A->Da)={b,a} SELECT(A->ε)={c,b,a,#} SELECT(C->aADC)={a}

select(C->ε)={#} select(D->b)={b} select(D->c)={a,#}

SELECT(A->Da)交SELECT(A->ε)!=∅

因此G(S)不是LL(1)文法。

2.法消除左递归之后的表达式文法是否是LL(1)文法?

G(s)消除左递归后文法G‘(s):

E -> TE‘

E‘ -> +TE‘|ε

T -> FT‘

T‘ -> *FT‘|ε

F -> (E) | i

Select(E‘ -> +TE‘) = First(+TE‘) = {+}

Select(E‘ -> ε) = (First(ε)-{ε})∪Follow(E‘) = {),ε}

Select(T‘ -> *FT‘) = First(*FT‘) = {*}

Select(T‘ -> ε) = (First(ε)-{ε})∪Follow(T‘) = {ε,+,)}

Select(F -> (E)) = First((E)) = {(}

Select(F -> i ) = First(i) = {i}

∵Select(E‘ -> +TE‘) ∩Select(E‘ -> ε) = ∅

Select(T‘ -> *FT‘) ∩Select(T‘ -> ε) = ∅

Select(F -> (E)) ∩Select(F -> i ) = ∅

∴ 文法G‘(s)是LL(1)文法。

3.接2,如果是LL(1)文法,写出它的递归下降语法分析程序代码。

E()

{T();

E'();

}

E'()

T()

T'()

F()

4.加上实验一的词法分析程序,形成可运行的语法分析程序,分析任意输入的符号串是不是合法的表达式。

免责声明:文章转载自《LL(1)文法的判断,递归下降分析程序》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇EXCEL-如何在excel中对图片进行批量排版实践windows下 speex 1.2rc1 中的回声消除功能(转)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

SQL group by 分组后,同一组的排序后取第一条

SELECT * FROM(                SELECT                     [SPID]                    ,[PH1]                    ,[PH1_Code]                    ,[ProjectName]                     ,ROW...

SQL性能优化(不断总结)

1.查询的模糊匹配     尽量避免在一个复杂查询里面使用 LIKE '%parm1%'—— 红色标识位置的百分号会导致相关列的索引无法使用,最好不要用.解决办法:其实只需要对该脚本略做改进,查询速度便会提高近百倍。改进方法如下:        a、修改前台程序——把查询条件的供应商名称一栏由原来的文本输入改为下拉列表,用户模糊输入供应商名称时,直接在前台...

SQL 一对多联表查询最大值

有两个数据表City表和Price表,CIty表的结构如下: Price表的结构如下: 查询每个城市最大的销售价格,并以最大价格进行降序排列,选取前5条记录,SQL语句的代码如下: select top 5 * from (select ROW_NUMBER() over(order by TmpTable.AdultyPrice desc) NID,...

服务器布署:网站注入与防范的方法

最近看到很多人的网站都被注入js,被iframe之类的。非常多。 1.首先检查一下服务器配置,重新配置一次服务器安全,可以参考 http://hi.baidu.com/zzxap/blog/item/18180000ff921516738b6564.html 2.其次,用麦咖啡自定义策略,即使网站程序有漏洞,别人也很难在文件上写入代码了。 参考自定义策略,...

在clickhouse中更新和删除

ck 目前支持了更新和删除,但是与传统sql语法 略有不同,我也记录下来,防止后面忘记。 测试数据 :) select count(*) from system.columns where table='test_update'; ┌─count()─┐ │ 332 │ └─────────┘ :) select count(*) from t...

浅谈CDQ分治

很久前就想写篇CDQ分治的blog了,现在填坑。 CDQ分治是一种分治算法,一般用于高维数据结构的降维。比如二维数据结构,可以通过CDQ分治变成一个一维的问题。 CDQ分治本质还是个分治。一般分治操作就是,我想知道一个长度为n的区间产生的贡献有多少,那我可以把区间平均划分成两部分,那么此时问题变成左区间产生的贡献+右区间产生的贡献+左区间对右区间产生的贡献...