第一篇:編譯原理課程設計_算術(shù)表達式的語法分析及語義分析程序設計(模版)
設計題一:算術(shù)表達式的語法分析及語義分析程序設計。1.目的
通過設計、編制、調(diào)試一個算術(shù)表達式的語法及語義分析程序,加深對語法及語義分析原理的理解,并實現(xiàn)詞法分析程序?qū)卧~序列的詞法檢查和分析。2.設計內(nèi)容及要求:
算術(shù)表達式的文法:
〈無符號整數(shù)〉∷= 〈數(shù)字〉{〈數(shù)字〉} 〈標志符〉∷= 〈字母〉{〈字母〉|〈數(shù)字〉} 〈表達式〉∷= [+|-]〈項〉{〈加法運算符〉〈項〉} 〈項〉∷= 〈因子〉{〈乘法運算符〉〈因子〉} 〈因子〉∷= 〈標志符〉|〈無符號整數(shù)〉|‘(’〈表達式〉‘)’ 〈加法運算符〉∷= +|- 〈乘法運算符〉∷= *|/
選擇算符優(yōu)先分析方法完成以上任務,生成逆波蘭式的中間代碼;
(1)寫出算術(shù)表達式的符合分析方法要求的文法,給出分析方法的思想,完成分析程序設計。
(2)編制好分析程序后,設計若干用例,上機測試并通過所設計的分析程序。
源代碼
#define _CRT_SECURE_NO_WARNINGS #include “stdio.h” #include “stdlib.h” #include
int fflag[10] = { 0 };//標志第i個非終結(jié)符的FIRSTVT集是否已求出 int lflag[10] = { 0 };//標志第i個非終結(jié)符的LASTVT集是否已求出 int deal();//對輸入串的分析
int terminal_symbol(char c);//判斷字符c是否是終極符 int location(char c);//求字符c在算符優(yōu)先關(guān)系表中的下標 void out(int j, int k, char *s);//打印s棧
void firstvt(char c);//求非終結(jié)符c的FIRSTVT集 void lastvt(char c);//求非終結(jié)符c的LASTVT集 void table();//創(chuàng)建文法優(yōu)先關(guān)系表 char output[10];//存儲逆波蘭式 void main(){
int i, j, k = 0;printf(“請輸入文法規(guī)則數(shù):”);scanf(“%d”, &r);printf(“請輸入文法規(guī)則:n”);for(i = 0;i } for(i = 0;i } for(i = 0;i for(j = 0;st[i][j]!= '