yytext

软件构造实验二-拷贝一个c文件 将其中的关键字int替换成float

落爺英雄遲暮 提交于 2020-05-03 22:47:03
1,新建 Parser Generator 点击project --> new 2,填写工程名字 随意取一个名字 点击OK 3,点击Project选项下的 parserwizard 分析器向导选项 这里需要填写 工程存放的目录,以及工程名字。 4,选择配置 这里选择 只lex文件,并创建main程序,单线程模式 点下一步 5,点击完成 6,程序会生成 mylexer.l 的lex空文件,我们需要建立一个简单的lex文件已作说明 将下列程序源代码覆盖生成的lex代码 1 % { 2 3 4 5 % } 6 7 8 9 %% 10 11 // 表示如果是在双引号(")中(即为字符串),则照常打印,编译时请删除此注释 12 13 \ " .*\" {printf( " %s " ,yytext);} 14 15 [^ \t\n]+ {printf( " %s " ,yytext);} 16 17 // 表示如果遇到float,且附加模式是后面跟有空白符,则将int替换为float,编译时请删除此注释 18 19 int /[ \t]+ {printf( " float " );} 20 21 \n|. {printf( " %s " ,yytext);} 22 23 %% 24 25 #pragma comment(lib,"y1.txt") 26 27 int main( void )

词法分析

女生的网名这么多〃 提交于 2020-03-29 20:24:03
基本数据类型: int,double,point?, char, bool int: +-*/^|~& double: +-*/ point: * bool: ==, !=, &&, ||, ! 数组: [const] 语句: 条件,选择,循环,强制转移 条件: if/else 选择: switch case : 循环: for 函数: 类型+标示符+(*)+{*} 模板: Template<*> 结构体: struct,构造函数,析构函数,:: 注释: // 分隔符: ;, {} 包含: #include<> //输入输出流: cin, cout 宏:Define static main() 保留字:int, double, char, Point/->/%, const, bool , !=, <,>,=, ==, &&, ||, !, ^, &, +,-,*,/,,|,^,~,[], 转移控制:if/else, switch/case/:, for, break, continue 模板:Template<T> 自定义数据类型:struct, ::, 句子隔断符:;,{} 包含:#include<> 宏:Define 代码: lex.h: #define INT 0 #define DOUBLE 1 #define CHAR 2 #define POINT 3 #define

lex/flex 笔记

拟墨画扇 提交于 2020-01-21 02:48:37
Lex的匹配策略: 1. 按最长匹配原则确定被选中的单词 2. 如果一个字符串能被若干正规式匹配,则先匹配排在前面的正规式。 lex源程序的写法:Lex源程序必须按照Lex语言的规范来写,其核心是一组词法规则(正规式)。一般而言,一个Lex源程序分为三部分,三部分之间以符号%%分隔。 定义段 %% 词法规则段 %% 辅助函数段 Lex源程序中常用到的变量及函数: yyin和yyout:这是Lex中本身已定义的输入和输出文件指针。这两个变量指明了lex生成的词法分析器从哪里获得输入和输出到哪里。默认:键盘输入,屏幕输出。 yytext和yyleng:这也是lex中已定义的变量,直接用就可以了。 yytext:指向当前识别的词法单元(词文)的指针 yyleng:当前词法单元的长度。 ECHO:Lex中预定义的宏,可以出现在动作中,相当于fprintf(yyout, “%s”,yytext),即输出当前匹配的词法单元。 yylex():词法分析器驱动程序,用Lex翻译器生成的lex.yy.c内必然含有这个函数。 yywrap():词法分析器遇到文件结尾时会调用yywrap()来决定下一步怎么做: 若yywrap()返回0,则继续扫描 若返回1,则返回报告文件结尾的0标记。 1. 用lex翻译器编译lex源程序命令(假设filename.l是lex源程序名): flex filename

词法分析器总结--flex&bison

纵然是瞬间 提交于 2020-01-05 01:26:10
转自: 项目总结之词法分析器 无论是词法分析,还是语法分析,给我的第一感觉就是逻辑要严谨。由于项目有自己一套完整的语言和语法,设计好其对应的词法分析器和语法分析器显得尤为重要。 我们采用flex进行词法分析。flex是一个用来生成扫描器(scanners)的工具,其中扫描器就是可以识别文本中词法模式的程序。具体流程为:flex读取给定的输入文件,或标准输入(当没有给定文件名时)读取信息来生成一个扫描器。信息以正则表达式和C代码组成,这种形式称为规则(rule)。flex生成C源代码文件lex.yy.c,其中定义了一个函数yylex()。这个文件通过编译,并用-lfl 链接生成可执行文件。当可执行文件被执行时,它分析输入中可能存在的符合正则表达的内容。当找到任何一个与正则表达式相匹配内容时,相应的C 代码将被执行。 flex输入文件由三段组成:定义(definitions),规则(rules),用户代码(user code) 一、定义段(definitions) 定义段包含了简单名称的声明(这些声明可以简化扫描器的说明)和开始条件。 在本项目中,定义段中还包含了选项options。现将介绍一些比较常用的options。 flex 提供一个机制用来在扫描器的说明中,而不是在flex 命令中控制选项。在扫描器的说明文件(flex 的输入文件)的第一段中使用%option 指令就可以实现

词法分析器生成工具flex

不打扰是莪最后的温柔 提交于 2020-01-05 01:24:58
1.FLEX简介 单词的描述称为模式(Lexical Pattern),模式一般用正规表达式进行精确描述。FLEX通过读取一个有规定格式的文本文件,输出一个如下所示的C语言源程序。 +------------+ +------------+ +----------------+ | 输入文件*.l |------>|flex工具 |------>|输出文件lex.yy.c | +------------+ +------------+ +----------------+ FLEX的输入文件称为LEX源文件,它内含正规表达式和对相应模式处理的C语言代码。LEX源文件的扩展名习惯上用.l表示。FLEX通过对源文件的 扫描自动生成相应的词法分析函数 int yylex(),并将之输出到名规定为lex.yy.c的文件中。实用时,可将其改名为lexyy.c。该文件即为LEX的输出文件或输出的词法分析器。 也可将 int yylex()加入自已的工程文件中使用。 2. LEX源文件的格式 LEX对源文件的格式要求非常严格,比如若将要求顶行书写的语句变成非顶行书写就会产生致命错误。而LEX本身的查错能力很弱,所以书写时一定要注意。 LEX的源文件由三个部份组成,每个部分之间用顶行的“%%”分割,其格式如下: 定义部份 % % 规则部份  % % 用户附加C语言部份