L文法规则
❶ 文法的规则描述
程序设计语言中的几类单词可用下述规则描述:
〈标识符〉→l|l〈字母数字〉
〈字母数字〉→l|d|l〈字母数字〉|d〈字母数字〉
〈无符号整数〉→d|d〈无符号整数〉
〈运算符〉→+|-|*|/|=|〈〈等号〉|〉〈等号〉……
〈等号〉→=
〈界符〉→,|;|(|)|……
其中l表示a~z中的任何一英文字母,d表示0~9中的任一数字。
关键字(保留字)也是一种单词,一般关键字(保留字)都是由字母构成,它的描述也极容易,实际上,关键字(保留字)集合是标识符集合的子集。
最复杂的一类单词要属无符号实数了,比如25.55e+5和2.1,它们可以由如下规则描述。
例4.6
〈无符号数〉→d〈余留无符号数〉|.〈十进小数〉|e〈指数部分〉
〈余留无符号数〉→d〈余留无符号数〉|.〈十进小数〉|e〈指数部分〉|ε
〈十进小数〉→d〈余留十进小数〉
〈余留十进小数〉→e〈指数部分〉|d〈余留十进小数〉|ε
〈指数部分〉→d〈余留整指数〉|s〈整指数〉
〈整指数〉→d〈余留整指数〉
〈余留整指数〉→d〈余留整指数〉|ε
其中s表示正或负号(+,-),d表示0~9中的任一数字。
举例
例:1型(上下文有关)文法
文法G[S]: S→CDAb→bA
C→aCA Ba→aB
C→bCB Bb→bB
AD→aD C→ε
BD→bD D→ε
Aa→bD
L(G)={ww|w∈{a,b}*}
例:2型(上下文无关)文法
文法G[S]: S→0A|1B|0
A→0A|1B|0S
B→1B|1|0
❷ 编译原理的LL(1)文法是什么意思
L表明自顶向下分析是从左向右扫描输入串,第2个L表明分析过程中将用最左到推倒,1表明只需向右看一个符号便可决定如何推倒即选择哪个产生式(规则)进行推导,类似也可以有LL(k)文法,也就是需要向前查看k个符号才能确定选用哪个产生式、、
❸ 英语语法规则这么多,怎样才能记清呢
英语语法规则多,各个用法之间的差别有时比较细微,不易弄清楚,更难以记住。但是,如果方法正确,下一些功夫,是可以学到手的。学习英语语法,首先必须弄清每个规则的基本概念和主要用法,然后再分辨与它相近的别的规则或用法的差异。这样才能弄清规则,记住用法。可以采取归纳、分类、对比等方法来达到上面的目的。
下面几种办法对理解和记住英语语法规则会有所帮助:
(1)将一条规则或一个词的所有用法归纳起来学习。比如将连词as的5种常见用法归纳如下:
①They took notes as they listened to the lecture. (表示时间)
②As you are tired,you had better have a rest. (表示原因)
③He doesn’t speak as others do.(表示方式)
④Do not make the same mistakes as I did. (表示比较)
⑤Rich as he is,he is not happy. (表示让步,rich as he is意思与though he is rich相同)
又如,在学完现在完成时的各种用法之后,可以将这些用法归纳起来学习。
(2)将容易混淆的不同的语法规则和词的用法,排在一起进行对比,很有利于分清差别。下面简单对比不定代词some,any,no的不同用法:
Our teacher has some English novels. (some在肯定句中作定语)
Have you any French novels? (any在疑问句中作定语)
No,l haven’t have any French novels. (any和not用在否定句中,any作定语)
She has no German novels. (no在否定句中作定语)
又如人们学习英语现在完成时,常将它与过去一般时的用法相比较,学习将来一般时常将shall,will,to be going to,be+动词不定式进行比较。
(3)将内容相同而用法有细微差别的一些语法现象或词加以分类。如表示时间的介词有at,in,on,buring,for,from,before,after,by,past,since,till,to,within,表示地点的介词有above,at,in,on,behind,below,beside,down,into,out of,over,under等。再找出一些典型的例子比较其用法的差别,就会加深印象。
学习英语的最终目的不仅仅是理解和记清规则和用法,而是要能使用它。因此,在懂得了规则之后,还有必要进行口头、笔语练习以及听力和阅读的实践。语言的练习和实践,是学习语言最有效的方法。等到能使用英语时,就用不着再去专门记忆语法规则了。
❹ 怎么判断一个文法是LR(0)
LR(0)分析就是LR(K)分析当K=0的情况,亦即在分析的每一步,只要根据当前的栈顶状态 (或者说根据当前分析栈中已移进或归约出的全部文法符号)就能确定应采取何种分析动作,而无须向前查看输入符号。
LR(0)分析器的分析能力最低,但它是构造其余三种LR分析器的基础。SLR是“简单LR”分析的缩写,它是为了解决构造LR(0)分析器所出现的问题而形成的一种方法,其分析能力自然要比LR(0)分析器稍强一些。
(4)L文法规则扩展阅读:
1965年,D.Knuth首先提出了LR(K)文法及LR(K)分析技术。所谓LR(K)分析,是指从左至右扫描和自底向上的语法分析,且在分析的每一步,只须根据分析栈当前已移进和归约出的全部文法符号,并至多再向前查看K个输入符号,就能确定相对于某一产生式左部符号的句柄是否已在分析栈的顶部形成,从而也就可以确定当前所应采取的分析动作。
LR分析是当前最一般的分析方法。这是因为它对文法的限制最少,现今能用上下文无关文法描述的程序设计语言一般均可用LR方法进行有效的分析,而且在分析的效率上也不比诸如不带回溯的自顶向下分析、一般的“移进归约”以及算符优先等分析方法逊色。
此外,LR分析器在工作过程中,还能准确及时地发现输入符号串的语法错误。凡此种种,就使LR分析方法在国际上受到了广泛的重视。
❺ 希伯来语的语法规则是怎样的
一、语法规则:
希伯来语语法是部分分析式的,使用前置词而非文法格来表达如与格、离格和宾格这样的形式。但是屈折在动词和名词的形成中扮演了决定性角色。比如,名词有一个构造状态,叫做“smikhut”,用来指示“属于”关系: 这是更加曲折语言的属格的逆反。处在 smikhut 的词经常用连字号 hyphen 合并起来。在现代讲话中,这个构造的使用有时同意思为“of”的前置词“shel”是可互换的。但是在很多情况下古老的变格形式被保留了(特别是在习惯用语和类似情况下),并且“人称”前接词被广泛的用来“变格”前置词。
希伯来文缺乏形容词,因此他们在描写的过程中就用比喻的方式,比如:你的爱情比酒更美;你的唇好像一条朱红线;我的良人在男子中,如同苹果树在树林中。
二、拼写规则:
希伯来语共有二十二个辅音字母,没有元音字母,拼写的时候用四个辅音字母Alef, He, Vav, Yod当作元音来拼写单词,也就是说这四个辅音字母Alef, He, Vav, Yud身兼两职,既做辅音字母又做元音字母,这四个字母也同样可以互相组合成为复合元音。现代的希伯来语拼写是相当规则和准确的。
在当今以色列以完整拼写法"Ktiv male"为主,有时文中也夹杂使用加点拼写法“Ktiv menukad”字母加点表示元音,目的是使单词发音更加清晰,及纯辅音拼写法"Ktiv haser"拼写时只使用辅音不使用元音,目的是使书写更加快捷简便,一些常用的单词如לא (/lo/,不), אמא (/ima/, 妈妈), 等等,因为人们都知道这些常用的单词怎样发音拼写时几乎只用纯辅音拼写法
(1)"Ktiv male"(完整拼写法),用四个辅音字母Alef, He, Vav, Yud当作元音来拼写单词,为当今希伯来语最主要最常用的拼写法。
(2)“Ktiv menukad”(加点拼写法),字母加点表示元音,主要用于教导希伯来语初学者准确发音
(3)"Ktiv haser"(纯辅音拼写法)拼写时只使用辅音不使用元音
❻ 请为语言L写一文法使其满足LL(1),其L={w|w属于(a|b)*且w中a、b的个数相等}
S->aSb|bSa|空
❼ 正规文法的详细特征
1.右线性文法
设G[S]=(VN,VT,P,S)为CFG,若P中的产生或均有如下的形式:
A→aB或A→a(A∈VN,a∈VT)
则称G为右线性文法。例如,文法
G1[S]=({S,A,B},{a,b},P1,S)
其中
P1={S→aA,A→aA,A→bB,A→b,B→bB,B→b}
为一右线性文法,G1所产生的正规集为
L(G1)={aibj |i,j≥1}
2.左线性文法
若一个文法G[S]=(VN,VT,P,S)中的产生式均有如下的形式:
A→Ba或A→a(A,B∈VN,a∈VT)
则称G为左线性文法。例如,文法
G2[S]=({S,A},{a,b},P2,S)
其中
P2={S→Sb,S→Ab,A→Aa,A→a}
为一左线性文法,且有
L(G2)=L(G1)={aibj |i,j≥1}
请注意,虽然文法
G3[S]=({S,A,B},{a,b},P3,S)
其中
P3={S→aA,A→aA,A→Bb,A→b,B→Bb,B→b}
也同样产生语言{aibj |i,j≥1},但由于G3中同时含有左线性产生式和右线性产生式,故G3不是正规文法。
另外
P4={S-->aA,A-->ab},
也不是正规文法
❽ 编译原理 文法L={ a^nb^mc^kd^n | m,n,k≥1 }
你写的显然是错误的。语言中只有开始一个a和结尾一个d。且B,C无穷无尽。
下面是一种写法,可供参考。
S->aSd|BC
B->bB|b
C->cC|c
❾ LL(1)文法-------编译原理
我正在写一个编译器,源代码在这里:
http://code.google.com/p/bellman/source/browse
其中词法规则在lex.l文件中,语法规则在grammer.y中,分别用flex和bison的输入文件的格式写的。我实现了一个类似C/C++的语法
地址如下:
http://code.google.com/p/bellman/source/browse/trunk/lib/bellman/lex.l
http://code.google.com/p/bellman/source/browse/trunk/lib/bellman/grammer.y
具体有什么问题可以发邮件[email protected]
❿ 如何判断一个文法是LL文法
对文法G的句子进行确定的自顶向下语法分析的充分必要条件是,G的任意两个具有相同左部的产生式A->α|β 满足下列条件:
(1)如果α、β均不能推导出ε,则 FIRST(α) ∩ FIRST(β) = Φ。
(2)α 和 β 至多有一个能推导出 ε。
(3)如果 β *═> ε,则 FIRST(α) ∩ FOLLOW(A) = Φ。
将满足上述条件的文法称为LL(1)文法。
第一个L代表从左向右扫描输入符号串,第二个L代表产生最左推导,1代表在分析过程中执行每一步推导都要向前查看一个输入符号——当前正在处理的输入符号。
LL(1)文法既不是二义性的,也不含左递归,对LL(1)文法的所有句子均可进行确定的自顶向下语法分析。
并不是所有的语言都可以用LL(1)文法来描述,而且不存在判定某语言是否是LL(1)文法的算法。也就是说,确定的自顶向下分析只能实现一部分上下文无关语言的分析,这就是LL(1)文法所产生的语言。另外,在上述LL(1)文法的条件中,要求:ε ∈ FIRST(α1),ε ∈ FIRST(α2),…ε ∈ FIRST(αn) 中至多有一个成立。