表示式翻譯器 1 編譯原理

2021-06-18 02:17:11 字數 3239 閱讀 6289

表示式翻譯器

一、實驗目的

構造乙個中綴表示式到字尾表示式的翻譯器,初步了解遞迴下降語法分析原理及語法制導翻譯的過程。

1實現的功能:

數字相加(包括多位數字),與字母相加(包括多字母),乘除,加減有優先順序順序的翻譯.

程式設計使用的語言:

涉及的演算法:詞法分析 左遞迴下降法

2.結果顯示:

3.關鍵**:

詞法分析:

int isdigit(int

t)int ischar(intt)

intmatch1()

ungetc(t, stdin);

//return tokenval;

lookahead1=tokenval;

return

num_tkn;

}else

if( ischar(t) )

while( ischar(t) ||isdigit(t) );

lexeme[i]='\0'

; ungetc(t, stdin);

return

id_tkn;

}

else

}}左遞迴下降法:

void

morefactors()

rest

break

;

case'/

':temp= match1(); factor(); putchar('

/'); morefactors(); //

rest --> - term rest

break

;

default: //

rest --> 空

break

; }}

void

moreterms()

rest

break

;

case'-

':temp= match1(); term(); putchar('

-'); moreterms(); //

rest --> - term rest

break

;

default: //

rest --> 空

break

; }

}

all code

#include #include 

#define num_tkn 500

#define id_tkn 600

#define none null

char

lookahead;

intlookahead1;

char lexeme[1024

];int lineno = 1,temp=0, tokenval = 0

; int isdigit(int

t)int ischar(int

t)int

match1()

ungetc(t, stdin);

//return tokenval;

lookahead1=tokenval;

return

num_tkn;

}else

if( ischar(t) )

while( ischar(t) ||isdigit(t) );

lexeme[i]='\0'

; ungetc(t, stdin);

return

id_tkn;

}

else

}}void match(char

t)*/

}void

expr();

void

factor()

if(temp==500

) printf(

"%d

",lookahead1);

else

if(temp==600

)

match(lookahead);

/*if(lookahead>='a' && lookahead<='z')

if(lookahead>='0' && lookahead<='9')

*/}void

morefactors();

void

term()

void

morefactors()

rest

break

;

case'/

':temp= match1(); factor(); putchar('

/'); morefactors(); //

rest --> - term rest

break

;

default: //

rest --> 空

break

; }

}void

moreterms()

rest

break

;

case'-

':temp= match1(); term(); putchar('

-'); moreterms(); //

rest --> - term rest

break

;

default: //

rest --> 空

break

; }

}void

expr()

void

main()

*/printf(

"\n表示式分析成功!\n");

}

編譯原理 7 4 翻譯布林表示式 A

大家都學過了布林表示式的翻譯,其中有乙個拉鍊 回填技術,這次我們就練習這個技術。注意,在布林表示式中,並且 運算的優先順序是要高於 或者 運算的。輸入為一行字串,例如 a b or c d and e f 每個符號都用空格間隔。其中邏輯運算子包含 and 和 or 關係運算子包含 假鏈跳到 真鏈跳到...

M 翻譯布林表示式 編譯原理機測

m 翻譯布林表示式 description 大家都學過了布林表示式的翻譯,其中有乙個拉鍊 回填技術,這次我們就練習這個技術。input 輸入為一行字串,例如 a b or c d and e f 每個符號都用空格間隔。其中邏輯運算子包含 and 和 or 關係運算子包含 output 假鏈跳到 真鏈...

編譯原理系列 算術表示式與陣列元素翻譯

簡單算術表示式和賦值句,是指表示式和賦值句中變數是不可再分的簡單變數 過程emit result arg1 op arg2 生成 result arg1 op arg2 的三位址碼產生式 語義規則 1 a id e 2 e e1 e2 3 e e1 e2 4 e e1 5 e e1 6 e id強制...