Yacc 与 Lex

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这两个工具,你永远不需要自己手工写一个解析程序。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值