不能直接理解为每个非终结符的Follow集,否则,lemon得到的只是简单的SLR(1)分析器。注意到followset是定义成项目(Config)的属性,在这里应该理解为向前搜索符。验证如下,注意,在程序lemon.c中要开启TEST宏定义:
语法文件(test.y[1]):
%include {
#include <iostream>
#include "ex2def.h"
#include "example2.h"
}
%token_type {Token}
%default_type {Token}
%type start {Token}
%type s {Token}
%type b {Token}
%type A {Token}
%type B {Token}
%syntax_error {
std::cout << "Syntax error!" << std::endl;
}
start ::= s.
s ::= b b.
b ::= A b.
b ::= B.
运行
得到test.out如下:
State 0:
start ::= * s
[$]
To (state 1) start ::= s *
To (state 0) s ::= * b b
s ::= * b b
[$]
To (state 2) s ::= b * b
b ::= * A b
[A B]
To (state 4) b ::= A * b
b ::= * B
[A B]
To (state 6) b ::= B *
A shift 4
B shift 6
start accept
s shift 1
b shift 2
State 1:
(0) start ::= s *
[$]
From (state 0) start ::= * s
$ reduce 0
State 2:
s ::= b * b
[$]
To (state 3) s ::= b b *
To (state 2) b ::= * A b
To (state 2) b ::= * B
From (state 0) s ::= * b b
b ::= * A b
[$]
To (state 4) b ::= A * b
b ::= * B
[$]
To (state 6) b ::= B *
A shift 4
B shift 6
b shift 3
State 3:
(1) s ::= b b *
[$]
From (state 2) s ::= b * b
$ reduce 1
State 4:
b ::= * A b
[$ A B]
To (state 4) b ::= A * b
b ::= A * b
[$ A B]
To (state 5) b ::= A b *
To (state 4) b ::= * A b
To (state 4) b ::= * B
From (state 0) b ::= * A b
From (state 4) b ::= * A b
From (state 2) b ::= * A b
b ::= * B
[$ A B]
To (state 6) b ::= B *
A shift 4
B shift 6
b shift 5
State 5:
(2) b ::= A b *
[$ A B]
From (state 4) b ::= A * b
$ reduce 2
A reduce 2
B reduce 2
State 6:
(3) b ::= B *
[$ A B]
From (state 0) b ::= * B
From (state 2) b ::= * B
From (state 4) b ::= * B
$ reduce 3
A reduce 3
B reduce 3
文法的First集和Follow集如下:
|
First
|
Follow
|
S’
|
a, b
|
#
|
S
|
a, b
|
#
|
B
|
a, b
|
#, a, b
|
显然,生成的test.out是LALR(1)分析器。
[1] 陈火旺,刘春林等.程序设计语言编译原理[M].第3版,北京:国防工业出版社,2000年1月:115.
分享到:
相关推荐
Lemon
lemon 语法解析器
Lemon评测软件,可以用来评测一个程序的可用性(简单来说就是可以模拟测试,代码相比OJ,需要加上freopen),不会用的...Lemon.exe在:Lemon评测.zip\lemon_v1.2_beta_mingw中。它不能移动,您可以创建快捷方式到桌面。
DHTML 开发手册本手册由 lemon 整理编辑E_mail:lemon_zj@163.com lemon_zj4618@163.com 本手册的内容全部来自Microsoft MSDN Library,若有疑问可直接访问Microsoft MSDN Library。 由于链接众多,错误之处...
在Build文件中点击John Lemon’s Haunted Jaunt.exe文件,程序即可运行。 素材在Assets文件夹中。 脚本位置:Assets -> Script。
Lemon 和 Cena 测评软件的安装和使用 (含软件): Lemon软件 cena-0.8.1-20110710-setup.exe Lemon 和 Cena 测评软件的安装和使用 .mp4
akerlof 1970 lemon market
lemon语法分析器,vs调试代码,可分析sqlite的语法分析层
LEMON语法分析在嵌入式数据库设计中的应用,黄加喜,陈天煌, LEMON是一款用C语言编写的LALR(1)类型语法分析器生成器,LEMON的主要功能是把由具有上下文无关的特殊语法写成一种语言文本,它短小精��
lemon OA在myeclipse上的完整部署
Lemon评测软件下载
LEMON 语法分析生成器(LALR(1)类型)源代码情景分析
标准lemon测评软件,解压后即可使用,可进行小规模或大规模的模拟比赛测评
Lemon语法分析生成器英文说明,方便学习lemon的同学学习
来源lemon社区,集成activiti并根据ZH特色定制了流程。源代码
ubuntu下的lemon评测软件。
GarbaGe的东西降价了!!!一分,就一分!!!好东西一定要分享啊啊啊!!! lemon评测器,十分好用,只需对应语言的编译器。 >c++——g++
开源OA,学习oa开发的好帮手
sqlite的lemon语法解析器中文帮助文档。修正了翻译过程中的部分错误和不准确的地方。lemon语法解析器的代码是没有版权的,真正意义上的开源软件,且性能比bison快一些。
如题,用于lemon去选手子文件夹。下载后查看readme使用。