表示式翻譯器
一、實驗目的
構造乙個中綴表示式到字尾表示式的翻譯器,初步了解遞迴下降語法分析原理及語法制導翻譯的過程。
1實現的功能:
數字相加(包括多位數字),與字母相加(包括多字母),乘除,加減有優先順序順序的翻譯.
程式設計使用的語言:
涉及的演算法:詞法分析 左遞迴下降法
2.結果顯示:
3.關鍵**:
詞法分析:
int isdigit(intall codet)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
; }
}
#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強制...