词法编译器报告.docx

词法编译器报告.docx

ID:59130969

大小:44.83 KB

页数:4页

时间:2020-09-12

词法编译器报告.docx_第1页
词法编译器报告.docx_第2页
词法编译器报告.docx_第3页
词法编译器报告.docx_第4页
资源描述:

《词法编译器报告.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、编译原理——C语言词法分析器学号姓名黎红波1、实验内容与要求基于C语言的字符集,编写C语言的词法分析器;要求能检查出输入程序中的不合法字符,输出该非法字符并显示所在行号;要求输出词法分析后的结果,并显示对应Token所在程序中的行号;要求能够过滤掉注释内容;2、实验方法利用flex工具进行分词,写出各种单词分类的正则表达式,利用flex工具自带的功能在linux下通过编写.l文件生成相应具有C语言词法分析功能的程序;3、分析与设计单词分类保留字:if

2、then

3、else

4、int

5、float

6、double

7、bool

8、char

9、printf

10、scanf

11、ret

12、urn

13、main

14、while

15、do

16、for

17、struct

18、void

19、break

20、const

21、static

22、auto

23、short

24、long

25、union

26、enum

27、typedef

28、unsigned

29、signed

30、extern

31、register

32、volatile

33、switch

34、case

35、goto

36、continue

37、default

38、sizeof

39、include标识符:[a-z_A-Z][a-z_A-Z0-9]*常量:1)字符串常量:"[^"]+"2)整型常量:([-+]?[1-9][0-9]*)

40、03)浮点常量:[-+]?[0-9]*.[0-9]+4)字

41、符常量:'[^']+'特殊符号:([=+-*/&!

42、%.])

43、([+-*/%<>=][=])限界符:[{}[](),;]注释判断://[^]*/*(.)**/利用yylineno来记录程序分析时所在行号,yytext记录当前正在分析的串;Analyse.l文件编写思路:当遇到上述分类中的匹配就输出对于行号和正在分析的串,当遇到空格、Tab及注释就直接跳过;没遇到一次’’则yylineno就增加1,如果都没有匹配成功则最后可以输出该字符不是C语言字符集里面的符号。4、实验结果

44、与分析对程序data.c进行分析:data.c:#includeintmain(){inta=0;intb+=a;//这是注释,编译期间会被忽略itnc=3.14;c=a+b;d="helloworld";c='c';return0;}测试截图如下:5、不足1、程序中略过了已#开头的行,对include和宏定义没有进行分析;2、对于/**/格式的注释,利用yylineno记录行数时只能记录在程序中的行号,没有包括注释中所包括的行号;6、源码展示(仅展示.l文件里面的内容)analyse.l:%{#include"stdio.h"#incl

45、ude"stdlib.h"%}INTEGER([-+]?[1-9][0-9]*)

46、0FLOAT[-+]?[0-9]*.[0-9]+STR"[^"]+"CHAR'[^']+'ID[a-z_A-Z][a-z_A-Z0-9]*SPEC([=+-*/&!

47、%.])

48、([+-*/%<>=][=])LIM[{}[](),;]%%#[^]*{}//[^]*{}/*(.)**/{}{INTEGER}{printf("Line%d:(Integer,%s)",yyline

49、no,yytext);}{FLOAT}{printf("Line%d:(Float,%s)",yylineno,yytext);}if

50、then

51、else

52、int

53、float

54、double

55、bool

56、char

57、printf

58、scanf

59、return

60、main

61、while

62、do

63、for

64、struct

65、void

66、break

67、const

68、static

69、auto

70、short

71、long

72、union

73、enum

74、typedef

75、unsigned

76、signed

77、extern

78、register

79、volatile

80、switch

81、case

82、goto

83、continue

84、def

85、ault

86、sizeof

87、include{printf("Line%d:(KeyWords,%s)",yylineno,yytext);}{STR}{printf("Line%d:(Str,%s)",yylineno,yytext);}{CHAR}{printf("Line%d:(Char,%s)",yylineno,yytext);}{ID}{printf("Line%d:(Id,%s)",yylineno,yytext);}{SPEC}{printf("Line%d:(Special,%s)",yylineno,yytext);}{L

88、IM}{printf("Line%d:(LimitDomain,%

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。