分别使用某种高级语言和LEX实现一个C语言子集的词法分析器,即从输入的源程序中,识别出各个具有独立意义的单词,滤掉空格和注释。依次输出各个单词的内部编码及单词符号自身值。(遇到错误时可显示“Error”,然后跳过错误部分继续显示)。其中空白符、制表符和换行符均视为空格,用来分隔单词,注释包括两种形式:/*…*/和//
2024-05-20 15:00:40 995KB C语言子集的词法分析器
1
%% ///////////////////////////////////////////////////////////////////////////// // rules section // place your Lex rules here "else" {printf("ELSE:%s%c ",yytext,' ');return ELSE;} "if" {printf("IF:%s%c ",yytext,' ');return IF;} "int" {printf("INT:%s%c ",yytext,' ');return INT;} "return" {printf("RETURN:%s%c ",yytext,' ');return RETURN;} "void" {printf("VOID:%s%c ",yytext,' ');return VOID;} "while" {printf("WHILE:%s%c ",yytext,' ');return WHILE;} "<" {printf("LT:%s%c ",yytext,' ');return LT;} ">" {printf("GT:%s%c ",yytext,' ');return GT;} "<=" {printf("LE:%s%c ",yytext,' ');return LE;} ">=" {printf("GE:%s%c ",yytext,' ');return GE;} "==" {printf("EQ:%s%c ",yytext,' ');return EQ;} "!=" {printf("NE:%s%c ",yytext,' ');return NE;} "{" {printf("{:%s%c ",yytext,' '); return '{';} "}" {printf("}:%s%c ",yytext,' '); return '}';} "(" {printf("(:%s%c ",yytext,' ');return '(';} ")" {printf("):%s%c ",yytext,' ');return ')';} "[" {printf("[:%s%c ",yytext,' ');return '[';} "]" {printf("]:%s%c ",yytext,' ');return ']';} "+" {printf("+:%s%c ",yytext,' ');return '+';} "-" {printf("-:%s%c ",yytext,' ');return '-';} "*" {printf("*:%s%c ",yytext,' ');return '*';} "/" {printf("/:%s%c ",yytext,' ');return '/';} "%" {printf("%:%s%c ",yytext,' ');return '%';} ";" {printf(";:%s%c ",yytext,' ');return ';';} "=" {printf("=:%s%c ",yytext,' ');return '=';} "," {printf(",:%s%c ",yytext,' ');return ',';} {id} {printf("id:%s%c ",yytext,' ');return ID;} {number} {printf("number:%s%c ",yytext,' '); return NUMBER;} "/*" { char c; int done = FALSE; ECHO; do { while((c=input())!='*') putchar(c); putchar(c); while((c=input())=='*') putchar(c); putchar(c); if(c=='/') done =TRUE; } while(!done); printf("\n: There are the conment!"); return COMMENT; } %% 程序可以正确的运行,供有需要的同学使用
2024-03-27 13:25:53 39KB lex词法分析器
1
这是一个编译的简单实验 用的是lex编写 lex使用在网上查找
2024-03-27 13:25:33 274B C语言词法分析器
1
Lex与Yacc, 词法和语法分析器讲解
带源码
2023-12-17 16:13:51 5.3MB Yacc 词法分析 语法分析
1
网上当前Lex与Yacc的书籍分两个版本,非扫描的清晰版本(但只有前5章)和非清晰扫描版本(书里头的代码都看不清)。 虽然看完前5章能大体掌握Lex与Yacc的用法,但要写出类型编程语言解析器等复杂的解析器,没有深入了解yacc的全部功能是远远不行的。而书的后几章正是要对Lex和Yacc的深入讲解。 本压缩包包含非扫描的清晰版本(只有前5章)和我花钱买下来的全书清晰扫描带书签版本。并附带源码。希望对同时Lex与Yacc和热忠者有所帮助。 同时,在这,也对Lex和Yacc的热忠者另外一个选择:gold parser。一个绝对值得你google一下的生成器。
2023-10-16 19:10:54 21.16MB Lex Yacc 第二版
1
包含正则表达式解析、生成NFA、生成DFA、生成最小DFA、生成C代码的xlex
2023-04-12 14:02:48 16KB lex 正则解析 DFA NFA
1
目录 序言 导言 Lex 理论 练习 Yacc 理论 练习 计算器 描述 包含文件 Lex输入文件 Yacc输入文件 解释器 编译器 图 Lex进阶 Yacc进阶
2023-04-03 15:01:58 378KB Lex Yacc 计算器
1
ubuntu交叉编译mysql5.5需要三个x86平台的文件,但它自动生成的是目标平台上的文件,所要不能在x86平台下运行。这三个文件是:comp_err comp_sql gen_lex_hash
2023-04-02 19:41:38 577KB comp_err comp_sql gen_lex_hash
1
LEX是UNIX的工具,因此我们需要使用FLEX代替,使得在windows下使用。提供lex,flex ,在win下也能体验编译的快乐
2023-03-10 14:49:58 17.22MB windows lex gcc yacc
1
Lex 和 Yacc 简明教程 (英译版 PDF高清) Lex 和 Yacc 简明教程 作者 :Thomas Niemann 翻译: 傅惠忠 序言 本书将教会你如何使用 lex 和 yacc 构造一个编译器。lex 和 yacc 是两个用来生成词汇分析器和 剖析器的工具。我假设你能够运用 C 语言编程,并且理解数据结构的含义,例如“链表”和 “树”。 导言部分描写了构建编译器所需的基本部分,以及 lex 和 yacc 之间的互动关系。后面两章更加 详细的描写了 lex 和 yacc 。以此为背景,我们构建了一个经典的计算器程序。这个计算器支持常用 的算术符号和控制结构,例如实现了像 if­else 和 while 这样的控制结构。经过小小的修改,我们就 把这个计算器转换成一个可以运行在基于栈的计算机上的编译器。后面的间节讨论了在编写编译器 是经常发生的问题。本书中使用的例程的源代码可以从下面列出的网站上下载到。 允许下面列出的网站复制本书的一部分内容,没有任何附加限制。例程中的源代码可以自由的 用于任何一个软件中,而无需通过作者的授权。 THOMAS NIEMANN 波特兰,俄勒冈州 网站:epaperpress.com 译者序 : 找不到好的中文资料,所以自己翻译了一个,如发现错误,请不吝赐教。 电子邮件:fuhuizn@hotmail.com 傅惠忠
2023-02-19 13:26:32 378KB 编译原理 词法分析 语法解析
1