詞法編譯器報(bào)告.docx

詞法編譯器報(bào)告.docx

ID:59130969

大小:44.83 KB

頁數(shù):4頁

時(shí)間:2020-09-12

詞法編譯器報(bào)告.docx_第1頁
詞法編譯器報(bào)告.docx_第2頁
詞法編譯器報(bào)告.docx_第3頁
詞法編譯器報(bào)告.docx_第4頁
資源描述:

《詞法編譯器報(bào)告.docx》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。

1、編譯原理——C語言詞法分析器學(xué)號(hào)姓名黎紅波1、實(shí)驗(yàn)內(nèi)容與要求基于C語言的字符集,編寫C語言的詞法分析器;要求能檢查出輸入程序中的不合法字符,輸出該非法字符并顯示所在行號(hào);要求輸出詞法分析后的結(jié)果,并顯示對應(yīng)Token所在程序中的行號(hào);要求能夠過濾掉注釋內(nèi)容;2、實(shí)驗(yàn)方法利用flex工具進(jìn)行分詞,寫出各種單詞分類的正則表達(dá)式,利用flex工具自帶的功能在linux下通過編寫.l文件生成相應(yīng)具有C語言詞法分析功能的程序;3、分析與設(shè)計(jì)單詞分類保留字: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標(biāo)識(shí)符:[a-z_A-Z][a-z_A-Z0-9]*常量:1)字符串常量:"[^"]+"2)整型常量:([-+]?[1-9][0-9]*)

40、03)浮點(diǎn)常量:[-+]?[0-9]*.[0-9]+4)字

41、符常量:'[^']+'特殊符號(hào):([=+-*/&!

42、%.])

43、([+-*/%<>=][=])限界符:[{}[](),;]注釋判斷://[^]*/*(.)**/利用yylineno來記錄程序分析時(shí)所在行號(hào),yytext記錄當(dāng)前正在分析的串;Analyse.l文件編寫思路:當(dāng)遇到上述分類中的匹配就輸出對于行號(hào)和正在分析的串,當(dāng)遇到空格、Tab及注釋就直接跳過;沒遇到一次’’則yylineno就增加1,如果都沒有匹配成功則最后可以輸出該字符不是C語言字符集里面的符號(hào)。4、實(shí)驗(yàn)結(jié)果

44、與分析對程序data.c進(jìn)行分析:data.c:#includeintmain(){inta=0;intb+=a;//這是注釋,編譯期間會(huì)被忽略itnc=3.14;c=a+b;d="helloworld";c='c';return0;}測試截圖如下:5、不足1、程序中略過了已#開頭的行,對include和宏定義沒有進(jìn)行分析;2、對于/**/格式的注釋,利用yylineno記錄行數(shù)時(shí)只能記錄在程序中的行號(hào),沒有包括注釋中所包括的行號(hào);6、源碼展示(僅展示.l文件里面的內(nèi)容)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,%

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時(shí)聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請聯(lián)系客服處理。