軟體體系結構的第二次實驗

2021-09-24 19:42:56 字數 2368 閱讀 3718

軟體體系結構的第二次實驗(直譯器風格與管道過濾器風格)

一、實驗目的

1.熟悉體系結構的風格的概念

2.理解和應用管道過濾器型的風格。

3、理解直譯器的原理

4、理解編譯器模型

二、實驗環境

硬體: 

軟體:python或任何一種自己喜歡的語言

三、實驗內容

1、實現「四則運算」的簡易翻譯器。

結果要求:

1)實現加減乘除四則運算,允許同時又多個運算元,如:2+3*5-6 結果是11

2)被運算元為整數,整數可以有多位

3)處理空格

4)輸入錯誤顯示錯誤提示,並返回命令狀態「calc」

圖1    實驗結果示例

加強練習:

1、有能力的同學,可以嘗試實現賦值語句,例如x=2+3*5-6,返回x=11。(注意:要實現直譯器的功能,而不是只是顯示)

2、嘗試實現自增和自減符號,例如x++ 

2、採用管道-過濾器(pipes and filters)風格實現直譯器

圖2  管道-過濾器風格

圖 3  編譯器模型示意圖

本實驗,實現的是詞法分析和語法分析兩個部分。

四、實驗步驟:

**:#include

#include

#include

#define maxsize 100

#define symbolsize 50

typedef struct oper_symbol

oper_symbol;

double caculate(char * expression);

double get_data(char * str,int beg,int end);

int is_operator_symbol(char ch);

long int power(int base,int times);

int main()

memset(expression,0,maxsize*sizeof(char));

while(1)

free(expression);

system("pause");

return 0;

}double caculate(char * expression)

for(i=0;ifor(j=0,i=0;jif( j+1 == symbol_index_len)

right_data = get_data(expression,symbols_index[j].index+1,strlen(expression));

else

right_data = get_data(expression,symbols_index[j].index+1,symbols_index[j+1].index);

if(symbols_index[j].oper == '*' || symbols_index[j].oper == '/')

datas[datas_len++] = temp;

}else

}k = symbol_len;

while(k)

datas[datas_len++] = temp;

symbol_len--;

}ret = datas[0];

free(datas);

free(symbols);

free(symbols_index);

return ret;

}int is_operator_symbol(char ch)

double get_data(char * str,int beg,int end)

if(str[i] == '.')

{i++;

k=1;

while(ilong int power(int base,int times)

{long ret = 1;

int i;

for(i=0;i截圖:

總體結構:

輸入表示式——檢查運算子優先順序並排序——計算——輸出結果

五、實驗總結

加深了體系結構的理解,並溫習了c語言。

第二次實驗

一 問題及 問題提 乙個數如果恰好等於它的因子之和,這個數就稱為 完數 例如6 1 2 3,再如8的因子和是7 即1 2 4 8不是完數。程式設計找出1000以內的所有完數。答案 6 28 496 檔名稱 作 者 周玉傑 完成日期 2017 年 3月 13 日 版 本 號 dev c 對任務及求解方...

第二次實驗

1 如何進行模式切換 哪兩種模式 答 第一次啟動linux系統會進入命令列模式,會要求輸入使用者名稱,預設的管理員帳號名為root,輸入 root 後回車,提示輸入密碼 密碼是在安裝系統時自己設定的 這樣就以管理員身份登陸了系統。第二種就是如果不想用使用命令列模式,而需要進入圖形介面 在命令列模式下...

C 第二次實驗

實驗目的 1.掌握類和物件的使用。2.掌握字段 屬性 方法 引數 過載 重寫與覆蓋 繼承和多型的使用。實驗內容 1.隨機給出乙個0至99 包括0和99 之間的數字,然後讓你猜是什麼數字。你可以隨便猜乙個數字,遊戲會提示太大還是太小,從而縮小結果範圍。經過幾次猜測與提示後,最終推出答案。1 控制台 w...