当前位置: 首页 > 工具软件 > Lex > 使用案例 >

Yacc 与 Lex

杨俊茂
2023-12-01

Yacc 与 Lex 快速入门(词法分析和语法分析)
https://blog.csdn.net/judyge/article/details/41017949

YACC = bison -y //yacc是个语法分析器	生成的文件后缀为.Y
LEX = flex //词法分析器,生成的文件后缀为.L
OBJS = y.tab.o lex.yy.o $(SOURCES:.c=.o) timestamp.o //$(SOURCES:.c=.o)用了替换,将SOURCES中的.c替换成了.o

boa_indexer:	index_dir.o escape.o   
	$(CC) -o $@  $^ $(LDFLAGS) $(LIBS)
 
clean:
	rm -f $(OBJS) boa core lex.yy.c y.tab.c y.tab.h *~ boa_indexer index_dir.o *.d  

# parser dependencies
 
y.tab.c y.tab.h:	boa_grammar.y
	$(YACC) -d $^
 
lex.yy.c:	boa_lexer.l
	$(LEX) $^


timestamp.o:	$(SOURCES) boa_grammar.y boa_lexer.l
// 用gcc -MM可以生成源文件的依赖关系,.depend文件原来都有了,可以make depend重新制作
初步学习lex和yacc

因为是非计算机本科,所以没有学编译原理,进来想补补课,于是买了本《自制编程语言》,里面介绍了lex和yacc工具,于是装起来试了下。

原来用工具来解析字符串还是挺方便的,以前知道正则以后,就觉得这东西很好,现在有了lex和yacc,把正则能做的事情又放大了,能够做更丰富的事情。

例如,写一个简单的把字符串里的数字相加,其他忽略的程序(说是简单是指功能,其实调通很不简单,哈哈,特别是把%type写成了%token的笔误后,纠结了很久)

1

如果你有Unix环境的编程经验,想必你肯定遇到过神秘的Lex和YACC工具,在GUN/Linux中,又分别称作Flex和Bison,其中Flex是由Vern Paxon实现的Lex版本,Bison是GUN版本的YACC.我们统一称他们为Lex和YACC,这些新版本是向上兼容的,因此你可以在我们的示例中使用Flex以及Bison.

这两个程序是非常有用的,但是跟C编译器一样,它的用户手册上即不会解释C语言,也不会告诉你如何使用C语言。YACC与Lex一起使用时非常有用,然而,Bison用户手册并没有介绍如何将Lex代码集成到Bison程序里。

关于Lex&YACC的巨作有很多。如果需要了解更多,你应该阅读它们。它们提供的信息比本文多的多。参考文章未尾"Further Reading"章节。本文的目的是通过实例引导你如何使用Lex&YACC。

Flex及BISON自带的文档非常优秀,但并非教程。

我无意成为Lex&YACC专家。当我开始写此文章时,不过接触它们两天而已。我所做的只是想让这两天对你而言会更轻松。

能力有限,不要期望文章能够恰如其份符合Lex&YACC风格。示例保持的尽量简单,可能有更好的方法,你可以写在下面的评论里。

使用恰当的话,这两个程序能够让你更容易的解析复杂的语言。例如读取配置文件,或者为你自己发明的编程语言写一个编译器。

通过本文,你会发现,有了Lex&YACC这两个工具,你永远不需要自己手工写一个解析程序。

 类似资料: