云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 编译原理课程设计编译器实现

编译原理课程设计编译器实现

  • 62 次阅读
  • 3 次下载
  • 2025/7/14 14:06:20

3.总体设计及开发工具的选择

3.1开发工具

LEX编译器环境:flex builder 2.0 编程语言:C

3.2总体设计

LEX语言是一种描述性语言,LEX源程序主要用来描述各类语言的词法,LWX源程序由三部分组成,说明部分、转换规则和辅助过程。用%%作间隔符。 a.说明部分主要用正规式定义单词的构词原则。 b.转换规则是如下形式的语句:

P1|action 1| P2|action 2| ??

Pn|action n|

其中,每个Pi是一个正规式,标示某类单词的词形,action i 是一段C程序代码,表示词法分析时识别出符合词形Pi的单词后应做的动作,如将该单词转化为内部形式,登录符号表等。

c.辅助过程容纳的是action部分需要的辅助过程,这些过程可分别编译并置于词法分析器中。

4.设计原则

4.1LEX编译程序产生词法分析程序的过程

要自动生成X语言的词法分析程序,需先编写LEX源程序来描述X语言的词法,之后LEX编译程序处理LEX源程序,构造一个DFA和一个控制程序,DFA和控制程序相互配合就可以作为X语言的词法分析程序。

4.1.1LEX编译程序产生DFA的过程

a.将各类单词的正规式转化为DFA

b.将各类单词正规式对应的DFA按相同的初态0连接成一个完整的DFA M

4.1.2产生控制程序的过程

LEX编译程序产生控制程序是通用的,不同的LEX源程序对应的控制程序的流程是相同的,控制程序流程如图三所示。图三中的限制条件是控制程序已读入的符号串长度

5

是否大于正在识别的单词的最大长度。图三中识别出i个单词后的后续处理是LEX源程序中的转换规则部分的动作代码。

DFA M和图三的控制程序配合即为词法分析程序。

图三 控制程序

5.数据结构

lex提供的外部数据结构

(1)yytext :外部字符数组,其内容是当前被匹配的字符串。每识别出一个字符串,yytext中的内容即被替换。

(2)ECHO :宏,Printf(“%s”,yytext);将yytext的内容打印出来。

(3)yyleng :外部变量,当前yytext中字符的个数。即当前匹配的字符串的长度。 例:输入串中 单词的个数 和 字符的个数 记数 [a―zA―Z]+ { words++; chars+= yyleng; }

注意:被匹配字符串的第一个和最后一个字符分别为yytext[0],和

yytext[yyleng-1]

6

6.详细设计

综合运用LEX编程。

a.将输入文件中的小写字母转换成大写字母,并输出到屏幕上 b.识别出文件中的标识符, 然后将识别出的标识符输出到屏幕上。

c.将输入串中所有能被7整除的整数加上3, 将结果输出到屏幕上. 其余部分照原样输出.

d.构造一个识别C语言的单词的词法分析程序。 源程序: A. %{

#include #include #include %} %% [a-z] printf(\%% main() {

yylex(); return 0; } int yywrap() {return 1; } B. %{

#include #include %} %% [a-zA-Z][a-zA-Z0-9]* { printf(\main() {

yylex(); return 0; } int yywrap() {return 1; } C.

#include #include int a; %} %%

[0-9][0-9]* { a=atoi(yytext); if(a%7==0) printf(\

7

else printf(\%% main() {

yylex(); return 0; } int yywrap() {return 1; } D. %{

#include %}

DIGIT [0-9] ID [a-z][a-z0-9]* %% {DIGIT}+|\

printf(\整数: %s (%d)\\n\}

{DIGIT}+\

printf(\浮点数:%s (%g)\\n\}

if|case|char|continue|default|do|double|else|float|for|int|return|switch|while|void { printf(\关键字:%s\\n\

\ printf(\运算符r:%s\\n\{ID} printf(\标志符: %s\\n\\

符: %s\\n\白字符\\n\不能识别字符:%s\\n\

main(argc,argv) int argc; char **argv; {

++argv, --argc; /*跳过执行文件名到第一个参数 if(argc>0) yyin=fopen(argv[0],\yyin=stdin; */

yyin=fopen(\从源文件中读取 */ yylex(); }

8

搜索更多关于: 编译原理课程设计编译器实现 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

3.总体设计及开发工具的选择 3.1开发工具 LEX编译器环境:flex builder 2.0 编程语言:C 3.2总体设计 LEX语言是一种描述性语言,LEX源程序主要用来描述各类语言的词法,LWX源程序由三部分组成,说明部分、转换规则和辅助过程。用%%作间隔符。 a.说明部分主要用正规式定义单词的构词原则。 b.转换规则是如下形式的语句: P1|action 1| P2|action 2| ?? Pn|action n| 其中,每个Pi是一个正规式,标示某类单词的词形,action i 是一段C程序代码,表示词法分析时识别出符合词形Pi的单词后应做的动作,如将该单词转化为内部形式,登录符号表等。 c.辅助过程容纳的是action部分需要的辅助过程,这些

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com