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

編譯程序和解釋程序[精選多篇]

時(shí)間:2019-05-14 17:37:13下載本文作者:會(huì)員上傳
簡介:寫寫幫文庫小編為你整理了多篇相關(guān)的《編譯程序和解釋程序》,但愿對(duì)你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫還可以找到更多《編譯程序和解釋程序》。

第一篇:編譯程序和解釋程序

編譯程序和解釋程序

如果一個(gè)程序能夠把某一種語言程序(稱為源語言程序)改造成為另一種語言程序(稱為目標(biāo)語言程序),則這親戚的程序稱為“翻譯程序”。如果源語言是“高級(jí)語言”(諸如FORTRAN、PASCAL等等),而目標(biāo)語言是“低級(jí)語言”(如匯編語言或機(jī)器語言),則這樣的翻譯程序稱為“編譯程序”。

現(xiàn)在的計(jì)算機(jī)尚不能直接執(zhí)行高級(jí)語言程序。執(zhí)行一個(gè)高級(jí)語言程序大體上要分兩步:第一步,把高級(jí)語言的源程序編譯成低級(jí)語言的目標(biāo)程序;第二步,運(yùn)行這個(gè)目標(biāo)程序。編譯程序的典型工作過程是:輸入源程序,對(duì)它進(jìn)行加工處理,輸出目標(biāo)程序。加工處理是非常復(fù)雜的過程,它又可劃分成以下幾個(gè)階段:源程序→詞法分析→語法分析→產(chǎn)生中間代碼→優(yōu)化→目標(biāo)代碼生成→目標(biāo)程序。

第一階段是詞法分析。承擔(dān)詞法分析任務(wù)的程序稱為“掃描器”。詞法分析的任務(wù)是:對(duì)構(gòu)成源程序的字符串進(jìn)行掃描和分解。第二階段是語法分析。承擔(dān)語法分析任務(wù)的程序稱為“分析器”。語法分析的任務(wù)是:根據(jù)語法規(guī)則,把描掃器所提供的結(jié)果分析成各類語法范疇。第三階段是產(chǎn)生中間代碼。承擔(dān)產(chǎn)生中間代碼任務(wù)的程序稱為“中間代碼產(chǎn)生器”。其任務(wù)是:按照語法分析器所識(shí)別出的語法范疇,產(chǎn)生相應(yīng)的中間指令。第四階段是優(yōu)化,即代碼優(yōu)化。優(yōu)化的任務(wù)是對(duì)前階段產(chǎn)生的中間代碼進(jìn)行加工變換,以便使生成的目標(biāo)程序,能運(yùn)行得更快更省(省內(nèi)存)。第五階段是目標(biāo)代碼生成。這一階段的任務(wù)是:按照優(yōu)化后的中間代碼和其它有關(guān)信息生成目標(biāo)程序。這種目標(biāo)程序可以在計(jì)算機(jī)上直接執(zhí)行。執(zhí)行這個(gè)目標(biāo)程序,就可得到一個(gè)高級(jí)語言程序的結(jié)果。我們知道,所謂翻譯程序是這樣一種程序,它能夠把用甲語言寫的程序翻譯成與之等價(jià)的用乙語言寫的程序。這里的甲語言是該翻譯程序的源語言,而乙語言則為該翻譯程序的目標(biāo)語言。對(duì)于編譯程序而言,源程序是被加工的對(duì)象,而目標(biāo)程序是加工后的結(jié)果。

在計(jì)算機(jī)上執(zhí)行用某種高級(jí)語言寫的源程序,通常有兩種方式:一是編譯執(zhí)行方式,二是解釋執(zhí)行方式。

采用編譯執(zhí)行方式執(zhí)行源程序時(shí)要分兩大步:編譯和運(yùn)行。編譯中的加工處理過程又可分為五個(gè)階段。

解釋執(zhí)行方式與編譯執(zhí)行方式是不同的,其根本區(qū)別在于:編譯方式把源程序的執(zhí)行過程嚴(yán)格地分成兩大步:編譯和運(yùn)行。即先把源程序全部翻譯成目標(biāo)代碼,然后再運(yùn)行此目標(biāo)代碼,獲執(zhí)行結(jié)果。解釋方式則不然。它是按照源程序中語句的動(dòng)態(tài)順序,直接地逐句進(jìn)行分析解釋,并立即執(zhí)行。所以,解釋程序是這樣一種程序,它能夠按照源程序中語句的動(dòng)態(tài)順序,逐句地分析解釋并執(zhí)行,直至源程序結(jié)束。與編譯程序一樣,解釋程序也與源語言及計(jì)算機(jī)有關(guān)。同一臺(tái)計(jì)算機(jī)上不同語言的解釋程序是不同的;同一種語言在不同的計(jì)算機(jī)上的解釋程序也可能不同。同一種高級(jí)語言的源程序,它可以采用解釋執(zhí)行方式,也可以采用編譯執(zhí)行方式。例如,BASIC語言有解釋BASIC和編譯BASIC之分。前者執(zhí)行速度慢;后者執(zhí)行速度快。編譯程序和解釋程序都屬于系統(tǒng)程序。

第二篇:Tiny C 語言編譯程序?qū)嶒?yàn)一 Scanner

Tiny C語言編譯程序?qū)嶒?yàn)一 Scanner Tiny C語言編譯程序?qū)嶒?yàn)一 Scanner 要求:填寫getToken()函數(shù),完成詞法分析器scan.c。

約定:

? 僅允許整數(shù)類型,不允許實(shí)數(shù)類型

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

? 識(shí)別出的Token由兩個(gè)變量:currentToken,tokenString識(shí)別,其中currentToken代表Token的類屬,為一個(gè)名為TokenType的枚舉類型,在文件globals.h中定義;tokenString代表Token在程序中出現(xiàn)的形式,即其本來面目。例如整數(shù)10的currentToken值為NUM,而tokenString值為‘10’;標(biāo)識(shí)符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;

畫識(shí)別符合TINY C語言構(gòu)詞規(guī)則的DFA。然后用直接編碼的方法構(gòu)造詞法分析器

/****************************************************/ /* 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)

//獲得下一字符

Tiny C語言編譯程序?qū)嶒?yàn)一 Scanner

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)

//進(jìn)行保留字的匹配 {實(shí)現(xiàn)請(qǐng)自己看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;

//保存被識(shí)別Token的類屬

StateType state = START;

//初始狀態(tài)為START

int save;

//標(biāo)識(shí)當(dāng)前字符是否保存,如空格,換行符n、TAB符t及注釋中的任何字符

while(state!= DONE)

//DONE狀態(tài)表示已識(shí)別出一個(gè)Token

{ int c = getNextChar();

save = TRUE;

switch(state)

{ case START:

if(isdigit(c))

state = INNUM;

else if(isletter(c))

{ state=DONE;currentToken=END;state=INID;state=INASSIGN;state=INCOMMENT;else if(c==':')else if(c=='{')else

}

break;

case INCOMMENT:

if(c=='}')

Tiny C語言編譯程序?qū)嶒?yàn)一 Scanner

{ state=DONE;currentToken=END;}

break;case INASSIGN: if(c=='=')

{

} else { error();currentToken=ERROR };/* 此處已填寫完整 */ state=DONE;currentToken=ASSIGN;break;

case INNUM:

if(!isdigit(c))

{ /* backup in the input */

ungetNextChar();

save = FALSE;

state = DONE;

currentToken = NUM;

}

break;

case INID:

if(!isletter(c)){ /* backup in the input */ ungetNextChar();save = FALSE;state = DONE;currentToken =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)

Tiny C語言編譯程序?qū)嶒?yàn)一 Scanner

{ tokenString[tokenStringIndex] = '

主站蜘蛛池模板: 久久精品国产精品亚洲蜜月| 国产农村妇女高潮大叫| 亚洲欧美人成网站在线观看看| 无码精品a∨在线观看中文| 久久亚洲中文字幕不卡一二区| 精品久久久久久无码中文野结衣| 国产无遮挡a片又黄又爽| 精品国产高清毛片a片看| 亚洲熟悉妇女xxx妇女av| 中文字幕v亚洲日本在线电影| 亚洲视频无码高清在线| 亚洲欧美日韩在线码| 亚洲精品无码久久毛片波多野吉衣| 国产内射在线激情一区| 青青草国产午夜精品| 国产尤物av尤物在线观看| 2022久久国产精品免费热麻豆| 四川丰满妇女毛片四川话| 日本人与黑人做爰视频网站| 国内熟妇人妻色无码视频在线| 狠狠色噜噜狠狠狠7777米奇| 无码人妻av免费一区二区三区| 日日噜噜夜夜狠狠视频无码| 亚洲成av人片在线观看ww| 亚洲精品无码成人a片蜜臀| 久久久久久欧美精品se一二三四| 东京热久久综合伊人av| 久久99精品久久久久免费| 99国产精品人妻噜啊噜| 无码r级限制片在线观看| 亚洲韩国精品无码一区二区三区| 黄瓜视频在线观看| 国产成人无码aa片免费看| 少妇放荡的呻吟干柴烈火动漫| 欧美另类与牲交zozozo| 亚洲国产五月综合网| 东北女人毛多水多牲交视频| 最新的国产成人精品2021| 国产精品一区二区av麻豆| 国产成人精品热玖玖玖| 亚洲va久久久噜噜噜久久|