lex的使用及说明,文件的生成
Lex 的使用及说明,文件的生成 Lex 是一种词法分析器,用于将输入源转换为标志(token)。 Lex 读取输入源,使用正则表达式匹配字符串,并将匹配的字符串转换为标志。每个匹配的模式都对应一个动作,通常情况下,动作是返回一个标志,代表匹配的字符串。 Lex 文件格式: Lex 输入文件分为三个部分,使用 %% 来分隔每个部分。第一个 %% 是必须的,在它后面是规则部分。如果不定义任何规则,缺省的动作是匹配任何文本并拷贝到输出。缺省的输入和输出是 stdin 和 stdout。 定义部分: 第一部分是定义部分,这部分的 C 代码被拷贝到生成的 C 文件的头部,C 代码必须用“%{”和“%}”包括起来。该部分还可定义简单的匹配模式,这些定义可以在后面的规则部分使用。 规则部分: 规则中的每个模式必须开始于一行的第一列。之后是空白符(空格、制表符、新行符)和对应的动作。动作可以是一个简单的 C 语句或使用 {} 包括的多个语句。文件中第一列没有内容的行都原样的拷贝到生成的 C 文件中。 第三部分: 定义 main 函数和其他处理函数。 Lex 的变量和函数(宏): * int yylex(void):Lex 的入口,返回标志(token) * char *yytext:指向匹配的串(null 结尾) * yyleng:匹配串的长度 * yylval:对应标志(token)的值 * int yywrap(void):输入结束时调用,返回 1 表示结束,0 表示还有数据处理 * FILE *yyout:输出文件,缺省是 stdout * FILE *yyin:输入文件,缺省是 stdin * INITIAL:开始状态 * BEGIN condition:切换开始状态 * ECHO:输出匹配串 处理方法: 1. 处理引号以双引号包围的字符串:可以使用正则表达式匹配双引号包围的字符串,并将其转换为标志。 2. 处理转义字符:可以使用正则表达式匹配转义字符,如 \n 和 \" 等,并将其转换为标志。 正则表达式概述: * .:匹配任何字符(除了新行符) * \n:匹配新行符 * *:匹配 0 个或多个前面模式的拷贝 * +:匹配一个或多个前面模式的拷贝 * ?:匹配 0 个或 1 个前面模式的拷贝 * ^:匹配行开头 * $:匹配行尾 * a|b:匹配 a 或 b * (ab)+:匹配一个或多个 ab 的拷贝 * [a+b]:匹配集合里的任意字符 * 字符的特殊含义:在字符集里,字符“-”代表一个范围,字符“^”在字符集里作为首字符,表示“反”含义。 Lex 的限制: Lex 不能识别嵌套的结构(如括号),因为处理嵌套结构需要一个栈,而 lex 没有。对此的处理使用 yacc 来实现。
- 粉丝: 0
- 资源: 2
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
评论2