ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Lex&Yacc之我的兄弟叫Flex&Bison 第一章 实现我的第一个Flex!

2021-05-08 13:32:42  阅读:180  来源: 互联网

标签:Flex 语法分析 字符 模式 Yacc Bison 匹配 词法 表达式


前面的话:在此之前,如果我接到一个解析文本的工作,我会逐行读取并存储我想要的数据再去处理数据。最近,工作中需要去解析verilog代码,大概浏览了github,给我这个没有学过编译原理的人指出了一条明路:yacc&lex,或者,flex&bison。

我的目标:以后如果碰到需要解析的工作,一个下午搞定。

本系列文章:我写这个系列的博客主要是记录收获的知识和踩过的坑,初学者的缘故,并不对其他人具有指导意义。当然,也可能你也和我有相同的问题或者感想,我们可以好好讨论一下。


经典的lex和yacc由贝尔实验室在20世纪70年代开发,flex和bsion是他们的现代版本。

第一章:实现我的第一个Flex!

1、词法分析和语法分析

解析工作通常可以分成两个部分:词法分析(lexical analysis 或者 scanning)和语法分析(syntax analysis 或者 parsing)。简单的说,词法分析是将输入分割成为一个个有意义的词块,成为记号(token),而语法分析是确定这些记号如何彼此关联的。下例所示:

A = B + C ;

词法分析器会将上面的例子拆分成 A、等号、B、加号、C、分号。语法分析器会确定B + C是一个表达式,并且表达式结果赋予给了A。

2、正则表达式

字符 含义
A-Z,0-9,a-z 构成了部分模式的字符和数字
. 匹配任意字符,除了\n
- 用来指定范围。例如:A-Z指从A到Z之间的所有字符
[] 一个字符集合。匹配括号内的任意字符。如果第一个字符是^那么它表示否定模式。例如:[abC]匹配a,b,C中的任何一个
* 匹配0个或者多个上述的模式
+ 匹配1个或者多个上述模式
? 匹配0个或者1个上述模式
$ 作为模式的最后一个字符匹配一行的结尾
{} 指出一个模式可能出现的次数。例如:A{1,3}表示A可能出现1次或者3次
\ 用来转义元字符。同样用来覆盖字符在此表中定义的特殊意义,只取字符的本意
^ 否定
| 表达式间的逻辑或
"<一些符号>" 字符的字面含义。元字符具有
/ 向前匹配。如果在匹配的模板中的"/"后跟有后续表达式,只匹配模板中"/"前面的部分。如:如果输入A01,那么在模板A0/1中的A0是匹配的
() 将一系列常规表达式分组

 

标签:Flex,语法分析,字符,模式,Yacc,Bison,匹配,词法,表达式
来源: https://www.cnblogs.com/zhangzhangtabszj/p/14744520.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有