Tiger-program1 -slp

1. 任務描述–SLP Interpreter

  1. 華保健的lab1
  2. [modern complier implementation in java]
  3. 總結來說就是利用前面介紹的數據結構和文法規則創建一個計算最大print參數數量的函數和一個直線型程序語言翻譯器。
  4. SLP Gramar在這裏插入圖片描述
  5. 要分析的stm是
    在這裏插入圖片描述

2. program

代碼在(tiger/src/slp/)[https://github.com/s1530129650/tiger/tree/Lab1/src/slp]
Slp裏給出了stm,exp和explist 類的定義。
Sample裏給出了符合SL語法的語句用來。
Main給出了max print agrs和interperter的具體實現。

3. 解決思路

對照着Tree representation比較好理解代碼。
在這裏插入圖片描述

3.1 計算print中的最大參數個數

只需要計算不同情況的print的最大參數數量即可。

// ///////////////////////////////////////////
  // maximum number of args
  private int maxArgsExp(Exp.T exp){...}
  private int maxArgsExpList(ExpList.T explist){...}
  private int maxArgsStm(Stm.T stm){...}
  // ////////////////////////////////////////
  

在不同的class計算各自的print參數的數量,在maxArgsExpList有所不同需要先加1,因爲explist裏總會有exp,而exp是id或者num是,參數數量是0;

private int maxArgsExpList(ExpList.T explist)
  {
	  if (explist instanceof ExpList.Pair) {
		  ExpList.Pair pair = (ExpList.Pair) explist;
		  int n1 = 1 + maxArgsExp(pair.exp);
		  int n2 = 1 + maxArgsExpList(pair.list);
		  
		  return n1 >= n2 ? n1 : n2;
	  }
	  else if(explist instanceof ExpList.Last)
	  {
		  ExpList.Last last = (ExpList.Last) explist;
		  int n = 1 + maxArgsExp(last.exp);
		  return n;
	  }
	  else
		  new Bug();
	  return 0;
  }

modern_compiler_implementation_in_java /chap1裏的size的實現異曲同工
在這裏插入圖片描述

3.2 interpreter

要實現interpreter,可以借鑑printer,分情況interper,

  1. 需要save,variables和對應的值,這裏tiger有個提示:
    用Table保存那些變量和value。
  class Table{
		String id; 
		int value;
		Table tail;
		Table(String i, int v, Table t)
		{
			id = i;
			value = v;
			tail = t;
		}
	}

exp 和explist僅需要返回一個Int值,但也需要用到Table,於是用IntAndTable來聲明exp和explist。

 class IntAndTable{
		int i;
		Table t;}

程序未實現update。

4. Result

在這裏插入圖片描述

5.reference

  1. Hbj Compiler
  2. modern_compiler_implementation_in_java
  3. Modern Compiler Implementation in Java
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章