SLR文法Java代码 SLR1文法
Java中,注释符和文档注释符的区别?
注释符就是用来标记注释的符号,Java中有3种注释符号
成都创新互联公司坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站建设、网站设计、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的富县网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
1. 单行注释:
从“//”开始到行末结束,均视为单行注释。
2. 多行注释:
从“/*”开始到“*/”结束,均视为多行注释。
3. 文档注释:
从“/**”开始到“*/”结束,均视为文档注释。
所谓文档注释,是指用javadoc命令可以提取为Java API文档的注释内容,也就是类的注释和方法的注释。
Java中没有标识符的概念,有标识的概念。标识是指包名、类名、方法名、变量名、参数名。在你的代码中,比如类名 slra、方法名 main、参数名 args,这些是标识
编译原理怎么判断是否为slr文法
LL(1)就是向前只搜索1个符号,即与FIRST()匹配,如果FIRST为空则还要考虑FELLOW.
LR需要构造一张LR分析表,此表用于当面临输入字符时,将它移进,规约(即自下而上分析思想),接受还是出错.
LR(0)找出句柄前缀,构造分析表,然后根据输入符号进行规约.
SLR(1)使用LR(0)时若有冲突,不知道规约,移进,活移进哪一个,所以需要向前搜索,则只把有问题的地方向前搜索一次.
LR(1)1.在每个项目中增加搜索符.2.举个列子如有A-α.Bβ,则还需将B的规则也加入.
LALR(1)就是假如两个产生式集相同则将它们合并为一个,几合并同心集.
如何判断一个文法是否为SLR(1)文法
最有效的方法是画slr分析表,有移入-规约冲突,或者规约-规约冲突的就不是slr文法,没有冲突就是slr文法。简单的用follow集合是不能准确判断它是不是slr文法的
要证明一个文法是SLR(1)文法,但不是LL(1)文法,是不是要分SLR和LL来分析说明呢?
是。
一、例如:证明下列文法是LL(1)文法但不是SLR(1)文法
S-AaAb|BbBa A-ᵋ(空值) B-ᵋ(空值)
1、首先该文法无左递归存在,没有公共左因子。
其次:对于S→AaAb|BbBa FIRST(AaAb)={a} FIRST(BbBa)={b}
FIRST(AaAb)∩FIRST(BbBa)=Φ
所以该文法是LL(1)文法.
2、证明该文法不是SLR的。
文法的LR(0)项目集规范族为:
I0={S’→.S S→.AaAb S→.BbBa A→. B→.}
I1={ S’→ S. }
I2={ S→A.aAb }
I3={ S→B.bBa }
I4={ S→Aa.Ab A→. }
I5={ S→Bb.Ba B→. }
I6={ S→AaA.b }
I7={ S→BbB.a }
I8={ S→AaAb. }
I9={ S→BbBa. }
考察I0:
FOLLOW(A)={a,b} FOLLOW(B)={a,b} FOLLOW(A)∩FOLLOW(B)= {a,b}
产生规约-规约冲突,所以该文法不是SLR(1)文法。
二、构造LR(1)自动机(没有需要合并的状态):
没有状态存在冲突,因而是LALR(1)文法。
构造LR(0)自动机:在状态I6,由于’a’∈FOLLOW(A),因而对于SLR(1)分析而言,存在移进-归约,所以这一文法不是SLR(1)文法。
扩展资料:
它通过两种方法做到这一点。首先,它在一个移进之前先考虑输入记号以确保存在着一个恰当的 DFA 。其次,使用构造的非终结符的 Follow 集合来决定是否应执行一个归约。令人吃惊的是,先行的这个简单应用的能力强大得足以分析几乎所有的一般的语言构造。
定义:SLR(1) 分析算法(SLR(1) parsing algorithm)。令s 为当前状态(位于分析栈的顶部)。则动作可定义如下:
若状态s 包含了格式A →a.Xb 的任意项目,其中X 是一个终结符,且X 是输入串中的下一个记号,则动作将当前的输入记号移进到栈中,且被压入到栈中的新状态是包含了项目A →aX.b 的状态。
参考资料来源:百度百科-SLR(1)分析
文章名称:SLR文法Java代码 SLR1文法
URL标题:http://hbruida.cn/article/docohcc.html