程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

基於Python實現語義分析

編輯:Python

1. 需求分析

能分析以下幾類語句,並建立符號表及生成中間代碼(三地址指令和 四元式形式):

  • 聲明語句(包括變量聲明、數組聲明、記錄聲明和過程聲明)
  • 表達式及賦值語句(包括數組元素的引用和賦值)
  • 分支語句:if_then_else
  • 循環語句:do_while
  • 過程調用語句

能夠識別出測試用例中的語義錯誤,包括

  • 變量(包括數組、指針、結構體)或過程未經聲明就使用
  • 變量(包括數組、指針、結構體)或過程名重復聲明
  • 運算分量類型不匹配(也包括賦值號兩邊的表達式類型不匹配)
  • 操作符與操作數之間的類型不匹配
    • 賦值號左邊出現一個只有右值的表達式
    • 數組下標不是整數
    • 對非數組變量使用數組訪問操作符
    • 對非結構體類型變量使用“.”操作符
    • 對非過程名使用過程調用操作符
    • 過程調用的參數類型或數目不匹配
    • 函數返回類型有誤

能准確給出錯誤所在位置。輸出的錯誤提示信息格式如下: Semantic error at Line [行號]:[說明文字]

2. 文法設計

要求:給出如下語言成分所對應的語義動作

  • 聲明語句(包括變量聲明、數組聲明、記錄聲明和過程聲明)

  • 表達式及賦值語句(包括數組元素的引用和賦值)

  • 分支語句:if_then_else

  • 循環語句:do_while

  • 過程調用語句

3. 系統設計

要求:分為系統概要設計和系統詳細設計。

  • 系統概要設計:給出必要的系統宏觀層面設計圖,如系統框架圖、數據流圖、功能模塊結構圖等以及相應的文字說明。

  • 系統詳細設計:對如下工作進行展開描述

核心數據結構的設計

該結構為語法分析樹的節點,用於存放單詞的內容、屬性、深度和子節點信息。

支持返回所有類中的所有實例。在返回屬性信息時,如果該節點不具備該屬性,會進行報錯。

子節點信息和屬性信息可以進行增加。

該結構為四元組,用於存放四元組內容。

同時對四元組的分析操作也包含在內

4. 系統實現及結果分析

要求:對如下內容展開描述。

  • 系統實現過程中遇到的問題;

該系統沒有辦法處理未經聲明就使用的變量。因為在存儲變量的屬性時,使用了字典,在調用變量時,如果該變量未經聲明,那麼符號表中就沒有它,也就沒有關於它的字典的 key,那麼程序會進行 keyerror 報錯。

  • 針對一測試程序輸出其語義分析結果;

測試樣例如下:

struct student {
int age;
}
int sum(int x, int y) {
int ret;
ret = x + y;
return ret;
}
int main() {
float a;
a = 1.567;
int b;
int[5][5] c;
c[1][1] = 10;
b = c[1][1];
int d;
int *e;
d = sum(b, c[1][1]);
if(d > 10) {
a = 1.0;
} else {
a = 2.0;
}
while(b < 10) {
d = d + 1;
b = b + 1;
}
return 0;
}

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved