久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

《編譯原理》課程設計說明-第1次

時間:2019-05-14 21:00:55下載本文作者:會員上傳
簡介:寫寫幫文庫小編為你整理了多篇相關的《《編譯原理》課程設計說明-第1次》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《《編譯原理》課程設計說明-第1次》。

第一篇:《編譯原理》課程設計說明-第1次

《編譯原理》課程設計

《編譯原理》課程設計

1.要求

完成一個簡化C語言——TINY C語言的編譯程序,最終能為用TINY C語言編寫的源程序(后綴為.tny,已給sample.tny,用一般的文本編輯程序即可打開)生成目標代碼,并在給定的虛擬機TM上運行得到運行結果。

TINY C語言中允許出現的字詞: ? 整數、標識符;

? 算術運算符/關系運算符/賦值運算符/界符:+、-、*、/、=、<、:=、;、{、}、(、)? 其它保留字:IF THEN ELSE END REPEAT UNTIL READ WRITE TINY C語言中允許出現的語法單位

? 表達式:簡單整型算術表達式、關系表達式 ? 語句:

? 條件語句(IF THEN ELSE END)? 循環語句(REPEAT UNTIL)? 賦值語句(:=)? 讀寫語句(READ WRITE)? { }中可以有注釋,但不能嵌套

2.步驟

1)、詞法分析

2)、語法分析

3)、語義分析

4)、生成目標代碼

3.源碼構成

? MAIN.C 主程序

? GLOBALS.H 全局類型及變量(如Token類屬及語法樹結點的組成)? UTIL.H、UTIL.C 各步驟的實用函數。如輸出Token,生成語法樹結點等 ? SCAN.C、SCAN.H 詞法分析程序及其頭文件 ? PARSE.C、PARSE.H 語法分析程序及其頭文件 ? ANALYZE.C、ANALYZE.H 語義檢查程序及其頭文件 ? SYMTAB.C、SYMTAB.H 符號表生成程序及其頭文件

? CGEN.H、CGEN.C、CODE.C、CODE.H 目標代碼生成程序及其頭文件

《編譯原理》課程設計

? TM 編譯sample.tny源程序后得到目標代碼,在該虛擬機上運行得到結果

步驟1——詞法分析

要求:填寫getToken()函數,完成詞法分析器scan.c。約定:

? 僅允許整數類型,不允許實數類型

? 標識符由大小寫英文字母組成,最多52個。其識別按最長匹配原則 ? 整數后緊跟非數字,或標識符后緊跟非字母認為是一個新Token開始 ? 由{ }括起來符號串都認為是注釋部分,該部分在詞法分析時被過濾掉

? 識別出的Token由兩個變量:currentToken,tokenString識別,其中currentToken代表Token的類屬,為一個名為TokenType的枚舉類型,在文件globals.h中定義;tokenString代表Token在程序中出現的形式,即其本來面目。例如整數10的currentToken值為NUM,而tokenString值為‘10’;標識符i的currentToken值為ID,而tokenString值為‘i’

typedef enum

{ ENDFILE,ERROR,IF,THEN,ELSE,END,REPEAT,UNTIL,READ,WRITE,/* 保留字 */

ID,NUM, ASSIGN,EQ,LT,PLUS,MINUS,TIMES,OVER,LPAREN,RPAREN,SEMI :=

= <

+

*

/

()

;

} TokenType;

畫識別符合TINY C語言構詞規則的DFA。然后用直接編碼的方法構造詞法分析器

/****************************************************/ /* File: scan.c

*/ /* The scanner implementation for the TINY compiler

*/ /****************************************************/ #include “globals.h”

#include “util.h”

#include “scan.h”

typedef enum

{ START, INASSIGN, INCOMMENT, INNUM, INID, DONE } StateType;

《編譯原理》課程設計

char tokenString[MAXTOKENLEN+1];static int getNextChar(void)

//獲得下一字符 {實現請自己看scan.c文件} static void ungetNextChar(void)

//用于回吐字符 {實現請自己看scan.c文件}

static struct

{ char* str;

TokenType tok;

} reservedWords[MAXRESERVED]

= {{“if”,IF},{“then”,THEN},{“else”,ELSE},{“end”,END},{“repeat”,REPEAT},{“until”,UNTIL},{“read”,READ},{“write”,WRITE}};

//定義保留字表

static TokenType reservedLookup(char * s)

//進行保留字的匹配 {實現請自己看scan.c文件}

/**********************************************/ /* the primary function of the scanner

*/ /* function getToken returns the next token in source file */ /**********************************************/ TokenType getToken(void){ int tokenStringIndex = 0;

TokenType currentToken;

//保存被識別Token的類屬

StateType state = START;

//初始狀態為START

int save;

//標識當前字符是否保存,如空格,換行符n、TAB符t及注釋中的任何字符

while(state!= DONE)

//DONE狀態表示已識別出一個Token

{ int c = getNextChar();

save = TRUE;

switch(state)

{ case START:

if(isdigit(c))

state = INNUM;

else if …… //此處請自己填寫(字符、:、空格/tab/換行、{、算符及界符等)

break;

case INCOMMENT:

…//此處請自己填寫,僅出現‘}’或EOF(注釋未完結束程序)時才改變狀態。

break;

case INASSIGN: …… //此處請自己填寫,‘=’或其它(出現錯誤)

《編譯原理》課程設計

break;

case INNUM:

if(!isdigit(c))

{ /* backup in the input */

ungetNextChar();

save = FALSE;

state = DONE;

currentToken = NUM;

}

break;

case INID:

…… //此處請自己填寫,不是字符則回吐,并進入DONE,且識別出一個ID

break;

case DONE: //不可能到

default: /* should never happen */

fprintf(listing,“Scanner Bug: state= %dn”,state);

state = DONE;

currentToken = ERROR;

break;

}

if((save)&&(tokenStringIndex <= MAXTOKENLEN))

tokenString[tokenStringIndex++] =(char)c;

if(state == DONE)

{ tokenString[tokenStringIndex] = '

主站蜘蛛池模板: 亚洲国产精品无码中文字2022| 亚洲精品久久久久久久蜜桃臀| 人禽伦免费交视频播放| 黑人强辱丰满的人妻熟女| 青楼妓女禁脔道具调教sm| 久久人妻无码一区二区三区av| 蜜桃一区二区三区| 丝袜美腿精品国产一区| 精品成人一区二区三区四区| 国产精品无码久久久久久| 国产在热线精品视频| 亚洲最大的熟女水蜜桃av网站| 中文字幕丰满乱子伦无码专区| 又大又粗又爽的少妇免费视频| 亚洲精品国产品国语原创| 精品欧美一区二区三区久久久| 亚洲欧美日韩国产综合在线一区| 大地资源中文在线观看官网第二页| 国产欧美日韩综合精品二区| 激烈的性高湖波多野结衣| 国产无套露脸在线观看| 国产精品美女被遭强扒开双腿| 国产成人精品永久免费视频| 亚洲精品久久一区二区三区四区| 真实的国产乱xxxx在线| 无码av一区二区三区无码| 无码欧精品亚洲日韩一区| 一卡二卡三卡视频| 亚洲av无码国产在丝袜线观看| 欧美性黑人极品hd| 亚洲图片校园另激情类小说| 小12萝8禁在线喷水观看| 亚洲乱码尤物193yw最新网站| 天堂网www在线资源网| 18禁高潮出水呻吟娇喘蜜芽| 国产成人精品亚洲日本在线| 人妻18毛片a级毛片免费看| 亚洲乱人伦中文字幕无码| 色狠狠成人综合网| 日韩精品亚洲一区在线综合| 国产欧美日韩久久久久|