freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

c-minus詞法分析和語法分析設(shè)計(jì)編譯器編譯原理課程設(shè)計(jì)-展示頁

2025-07-08 07:54本頁面
  

【正文】 h = getNextChar()。 lineCount = 0。 getSourseStringFromFile()。}void Scanner :: scan(){ cout開始詞法分析...endl。 sourseString = 。 str = 。/*Name: 詞法分析器Copyright: Author: XXXDate: 190514 12:00Description: 提取出token*/Scanner :: Scanner(){ scanSuccess = true。 output(gcd(x,y))。 x=input()。 /* uu/v*v== u mod v */}void main(void){ int x。s Algorithm to pute gcd. */int gcd (int u, int v){ if (v==0) return u。 測(cè)試程序說明根據(jù)附錄A后面的例子,程序輸入兩個(gè)整數(shù),計(jì)算并打印出它們的最大公因子。 TreeNode * call(TreeNode * k)。 TreeNode * term(TreeNode * k)。 TreeNode * simple_expression(TreeNode * k)。 TreeNode * expression(void)。 TreeNode * iteration_stmt(void)。 TreeNode * expression_stmt(void)。 TreeNode * statement_list(void)。 TreeNode * pound_stmt(void)。 TreeNode * param_list(TreeNode * k)。 TreeNode * declaration(void)。//輸出語法樹到文件//treeNode定義 包括子節(jié)點(diǎn)、兄弟節(jié)點(diǎn)、所處行號(hào)、節(jié)點(diǎn)類型、屬性、表達(dá)式返回類型typedef struct treeNode TreeNode * newNode(Nodekind k)。typedef enum {Void,Integer} ExpType。 : Parser :: Parser()//界面設(shè)計(jì) Token Parser :: getToken()//獲取scanner中保存在TokenList數(shù)組中的Token,并且每次獲取完之后數(shù)組下標(biāo)指向下一個(gè)void Parser :: syntaxError(string s)//出錯(cuò)處理void Parser :: match(TokenType ex)//匹配出錯(cuò)TreeNode * Parser :: declaration(void)//類型匹配錯(cuò)誤TreeNode * Parser :: param_list(TreeNode * k)//k可能是已經(jīng)被取出來的VoidK,但又不是(void)類型的參數(shù)列表,所以一直傳到param中去,作為其一個(gè)子節(jié)點(diǎn)216。|return expression。|。根據(jù)C語言的規(guī)則,得出BNF語法如下: declarationlist declarationlist declaration | declaration vardeclaration|fundeclaration typespecifier ID。 output(gcd(x,y))。 x=input()。 /* uu/v*v== u mod v */}void main(void){ int x。s Algorithm to pute gcd. */int gcd (int u, int v){ if (v==0) return u。 測(cè)試程序說明根據(jù)附錄A后面的例子,程序輸入兩個(gè)整數(shù),計(jì)算并打印出它們的最大公因子。 printToken()。 if(scanSuccess==false) cout詞法分析出錯(cuò)!endl。class Scanner:216。}。 string tokenString。、,、(、)、[、]、{、}、/*、*/、num、id、錯(cuò)誤、結(jié)束typedef enum{ ELSE = 1,IF,INT,RETURN,VOID,WHILE, PLUS,MINUS,TIMES,OVER,LT,LEQ,GT,GEQ,EQ,NEQ,ASSIGN,SEMI,COMMA,LPAREN,RPAREN,LMBRACKET,RMBRACKET,LBBRACKET,RBBRACKET,LCOMMENT,RCOMMENT, NUM,ID,ERROR,ENDFILE} TokenType。 :聲明詞法狀態(tài),詞法分析//DFA中的狀態(tài)typedef enum{ START = 1, INNUM, INID, INDBSYM, DONE} DFAState。當(dāng)字符為“/”時(shí),狀態(tài)轉(zhuǎn)換為SLAH再判斷下一個(gè)字符,如果為“*”則繼續(xù)轉(zhuǎn)到INCOMMENT,最后以“*”時(shí)轉(zhuǎn)到ENDCOMMENT狀態(tài),表明是注釋,如果其他的則是字符停滯于當(dāng)前字符,并且輸出“/”。初始狀態(tài)設(shè)置為START,當(dāng)需要得到下一個(gè)token時(shí),取得次token的第一個(gè)字符,并且按照DFA與對(duì)此字符的類型分析,轉(zhuǎn)換狀態(tài)。注釋可以放在任何空白出現(xiàn)的位置(即注釋不能放在標(biāo)記內(nèi))上,且可以超過一行??崭裢ǔ1缓雎?,除了它必須分開ID、NUM關(guān)鍵字。 慣用詞法:1  語言的關(guān)鍵字:else if int return void while2  專用符號(hào):+ * / = = == != = 。2. 分析與設(shè)計(jì)C編譯器設(shè)計(jì)的整體框架,本實(shí)驗(yàn)實(shí)現(xiàn)掃描處理和語法分析程序(圖中粗黑部分)。編譯原理課程設(shè)計(jì)報(bào)告課題名稱: C Minus詞法分析和語法分析設(shè)計(jì) 提交文檔學(xué)生姓名: X X X 提交文檔學(xué)生學(xué)號(hào): XXXXXXXXXX 同組 成 員 名 單: X X X 指導(dǎo) 教 師 姓 名: X X 指導(dǎo)教師評(píng)閱成績(jī): 指導(dǎo)教師評(píng)閱意見: . . 提交報(bào)告時(shí)間:2015年6月10日1. 課程設(shè)計(jì)目標(biāo)實(shí)驗(yàn)建立C編譯器。只含有掃描程序(scanner)和語法分析(parser)部分。 、掃描程序scanner部分設(shè)計(jì)思想:根據(jù)DFA圖用switchcase結(jié)構(gòu)實(shí)現(xiàn)狀態(tài)轉(zhuǎn)換。 , ( ) [ ] { } /* */3  其他標(biāo)記是ID和NUM,通過下列正則表達(dá)式定義: ID = letter letter* NUM = digit digit* letter = a|..|z|A|..|Z digit = 0|..|9大寫和小寫字母是有區(qū)別的4  空格由空白、換行符和制表符組成。5  注釋用通常的C語言符號(hào)/ * . . . * /圍起來。注釋不能嵌套說明:當(dāng)輸入的字符使DFA到達(dá)接受狀態(tài)的時(shí)候,則可以確定一個(gè)單詞了。重復(fù)此步驟,直到DONE為止,輸出token類型。 各文件或函數(shù)的設(shè)計(jì)說明掃描程序用到:,216。//定義的Token的類型(31種),分別對(duì)應(yīng)于else、if、int、return、void、while、+、*、/、=、=、==、!=、=、。//定義的Token結(jié)構(gòu)體,包括類型、對(duì)應(yīng)的串、所在代碼的行號(hào)struct Token{ TokenType tokenType。 int lineNo。 //每種TokenType對(duì)應(yīng)的串,如tokenTypeString[ELSE]==ELSEconst string tokenTypeString[32] = {OTHER, ELSE, IF, INT, RETURN, VOID, WHILE, PLUS, MINUS, TIMES, OVER, LT, LEQ, GT, GEQ, EQ, NEQ, ASSIGN, SEMI, COMMA, LPAREN, RPAREN, LMBRACKET, RMBRACKET, LBBRACKET, RBBRACKET, LCOMMENT, RCOMMENT, NUM, ID, ERROR, ENDFILE}。 void Scanner :: scan():設(shè)置輸出結(jié)果界面以及設(shè)置各種輸出狀態(tài)。 else cout詞法分析成功了!endl。/**///正在刪除注釋void Scanner :: deleteComments()TokenType Scanner :: returnTokenType(string s)//返回Token的類型DFAState Scanner :: charType(char c)//返回字符的類型typedef enum{ ENDFILE,ERROR, IF,ELSE,INT,RETURN,VOID,WHILE, //關(guān)鍵字ID,NUM, ASSIGN,PLUS,MINUS,TIMES,OVER,EQ,UEQ,LT,LPAREN,RPAREN,SEMI,BT,LQ,BQ, DOU,LZGH,RZGH,LDGH,RDGH,//特殊字符:= + * / == != 等} TokenType。/* A program to perform Eucild39。 else return gcd(v,uu/v*v)。 int y。 y=input()。}、語法分析parse部分設(shè)計(jì)思想:parser用遞歸下降分析方法實(shí)現(xiàn),通過調(diào)用詞法分析函數(shù)getToken實(shí)現(xiàn)語法分析。|typespecfier ID[NUM] int|void ID(parans) poundstmt paramslist|void paramlist,param|param typespecifier ID|typespecifier ID [] {localdeclarations statementlist} localdeclarations vardeclaration|empty statementlist statement|empty expressionstmt|poundstmt|selectionstmt|iterationstmt|returnstmt expression。 if(expression)statement|if(expression)statement else statement while(expression)statement return 。 var=expression|simpleexpression ID|ID[expression] additiveexpression relop additiveexpression|additiveexpression =|||=|==|!= additiveexpression addop term|term +| term mulop factor|factor *|/ (expression)|var|call|NUM ID(args) arglist|empty arglist,expression|expression 各文件或函數(shù)的設(shè)計(jì)說明語法分析程序包括:,216。 : //19種節(jié)點(diǎn)類型,分別表示int、id、void、數(shù)值、變量聲明、數(shù)組聲明、函數(shù)聲明、函數(shù)聲明參數(shù)列表、函數(shù)聲明參數(shù)、復(fù)合語句體、if、while、return、賦值、運(yùn)算、數(shù)組元素、函數(shù)調(diào)用、函數(shù)調(diào)用參數(shù)列表、未知節(jié)點(diǎn)typedef enum {IntK, IdK, VoidK, ConstK, Var_DeclK, Arry_DeclK, FunK, ParamsK,
點(diǎn)擊復(fù)制文檔內(nèi)容
試題試卷相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1