詞法 語法 語義分析實驗

2021-08-14 02:28:06 字數 3904 閱讀 4397

一、詞法分析

#include #include #include using namespace std;

char *rwtab[6]=;

//syn:單詞符號的種別碼;

//token:單詞符號的字串

//sum:整數

char token[16];

int sum,syn;

char program[110],ch;//輸入程式,單個字元

int p,m;//下標

void scanner()

ch=program[p++];

while(ch==' ')

if((ch>='a'&&ch<='z')||(ch>='a'&&ch<='z'))

token[m++]='\0';

p--;

syn=10;

for(int i=0; i<6; i++) }}

else if(ch>='0' && ch<='9')

p--;

syn=11;

if(sum>65536)

syn=-1;

}else switch(ch)

else

break;

case '<':m=0; token[m++]=ch;

ch=program[p++];

if(ch=='>')

else if(ch=='=')

else

break;

case '>':m=0; token[m++]=ch;

ch=program[p++];

if(ch=='=')

else

break;

case '=':syn=25; token[0]=ch;break;

case ';':syn=26; token[0]=ch;break;

case '(':syn=27; token[0]=ch;break;

case ')':syn=28; token[0]=ch;break;

case '#':syn=0; token[0]=ch;break;

default: syn=-1;break;

}}int main()

while(ch!='#');

p=0;

do ;

//syn:單詞符號的種別碼;

//token:單詞符號的字串

//sum:整數

char token[16];

int sum,syn;

char program[110],ch;//輸入程式,單個字元

int p,m;//下標

int kk;//出錯處理標記

void scanner();

void factor();

void term();

void expression();

void statement();

void statementstring();

void irparser();

void scanner()

if((ch>='a'&&ch<='z')||(ch>='a'&&ch<='z'))

token[m++]='\0';

p--;

syn=10;

for(int i=0; i<6; i++) }}

else if(ch>='0' && ch<='9')

p--;

syn=11;

if(sum>65536)

syn=-1;

}else switch(ch)

else

break;

case '<':m=0; token[m++]=ch;

ch=program[p++];

if(ch=='>')

else if(ch=='=')

else

break;

case '>':m=0; token[m++]=ch;

ch=program[p++];

if(ch=='=')

else

break;

case '=':syn=25; token[0]=ch;break;

case ';':syn=26; token[0]=ch;break;

case '(':syn=27; token[0]=ch;break;

case ')':syn=28; token[0]=ch;break;

case '#':syn=0; token[0]=ch;break;

default: syn=-1;break;

}}void factor() ;

//syn:單詞符號的種別碼;

//token:單詞符號的字串

//sum:整數

char token[16];

int sum,syn;

char program[110],ch;//輸入程式,單個字元

int p,m,q;//下標

int kk;//出錯處理標記

struct quad[20];

char *newtemp();//新形式

void emit(string result, string ag1, string op, string ag2);

void irparser();

int statementstring();

int statement();

char *expression();

char *term();

char *factor();

void scanner();

char *newtemp()

//結果 值一 運算子 值二

void emit(char *result, char *ag1, char *op, char *ag2)

void scanner()

if((ch>='a'&&ch<='z')||(ch>='a'&&ch<='z'))

token[m++]='\0';

p--;

syn=10;

for(int i=0; i<6; i++) }}

else if(ch>='0' && ch<='9')

p--;

syn=11;

if(sum>65536)

syn=-1;

}else switch(ch)

else

break;

case '<':m=0; token[m++]=ch;

ch=program[p++];

if(ch=='>')

else if(ch=='=')

else

break;

case '>':m=0; token[m++]=ch;

ch=program[p++];

if(ch=='=')

else

break;

case '=':syn=25; token[0]=ch;break;

case ';':syn=26; token[0]=ch;break;

case '(':syn=27; token[0]=ch;break;

case ')':syn=28; token[0]=ch;break;

case '#':syn=0; token[0]=ch;break;

default: syn=-1;break;

}}char *factor() { //因子

char *fplace;

fplace=(char *)malloc(12);

if(syn==10) {// '*' 呼叫,繼續掃瞄

strcpy(fplace,token);

scanner();

//cout<

詞法 語法 語義

詞法分析階段是編譯過程的第乙個階段,這個階段的任務是對源程式從前到後 從左到右 住個字元的掃瞄,從中識別出乙個個 單詞 符號。單詞 符號是程式語言的基本語法單位,如關鍵字 保留字 識別符號 常數 運算子 分隔符等。詞法分析程式輸出的 單詞 常以二元組的方式輸出,即單詞種別和單詞自身的值。其任務是在詞...

編譯原理 詞法,語法,語義分析

詞法分析的主要任務 從左向右逐行掃瞄源程式的字元,識別出各個單詞,確定單詞的型別 將識別出的單詞轉換成統一的機內表示 詞法單元 token 形式 token 種別碼,屬性值 單詞型別 種別種別碼 關鍵字program.if else then 一詞一碼 識別符號變數名 陣列名 記錄名 過程名 多詞一...

編譯原理方面 詞法語法語義分析器

實驗要求 要求設計出並實現乙個一遍掃瞄的詞法語法語義分析程式,將多條簡單賦值語句翻譯成三位址 要求有一定的出錯提示和錯誤恢復功能。一 待分析的簡單語言的語法 1 程式 begin 語句串 end 2 語句串 語句 3 語句 賦值語句 4 賦值語句 id 表示式 5 表示式 項 6 項 因子 7 因子...