編譯原理實驗 LL(1)文法

2021-08-21 15:32:09 字數 2009 閱讀 2004

目標任務

實現 ll(1)分析中控制程式(表驅動程式);完成以下描述算術表示式的 ll(1)文法的 ll(1)分析程式。

g[e]: e→te'

e'→ate' |ε

t→ft'

t'→mft' |ε

f→ (e)|i

a→+|-

m→*|/

說明:終結符號 i 為使用者定義的簡單變數,即識別符號的定義。

// compiler3.cpp : 定義控制台應用程式的入口點。

//#include "stdafx.h"

#include #include #include using namespace std;

string ll1_table[7][8];

char vn[7] = ; //非終結符,e'轉化為x,t'轉化為y

char vt[8] = ; //終結符

int find_vn(char s) //查詢非終結符

return -1;

}int find_vt(char c) //查詢終結符

} return -1;

}void zaobiao()

ll1_table[0][0] = "e→tx";

ll1_table[0][5] = "e→tx";

ll1_table[1][1] = "x→atx";

ll1_table[1][2] = "x→atx";

ll1_table[1][6] = "e→";

ll1_table[1][7] = "e→";

ll1_table[2][0] = "t→fy";

ll1_table[2][5] = "t→fy";

ll1_table[3][1] = "y→";

ll1_table[3][2] = "y→";

ll1_table[3][3] = "y→mfy";

ll1_table[3][4] = "y→mfy";

ll1_table[3][6] = "y→";

ll1_table[3][7] = "y→";

ll1_table[4][0] = "f→i";

ll1_table[4][5] = "f→(e)";

ll1_table[5][1] = "a→+";

ll1_table[5][2] = "a→-";

ll1_table[6][3] = "m→*";

ll1_table[6][4] = "m→/";}/*

測試用例1:

12, i

21, +

12, c

32, /

12, i

*//*

測試用例2:

28, (

12, i

22, -

12, i

29, )

23, *

28, (

12, i

21, +

12, i

29, )

*/int main()

input[num] = read[i + 2];

num++;

} input[num] = '#';

input[num + 1] = '\0';

printf("\n表示式為:%s\n", input);

// cin >> input; //輸入需要匹配的表示式

stacka;

a.push('#');

a.push('e');

zaobiao();

/* for (int i = 0; i < 7; i++) 輸出ll(1)表

cout << endl;

}*/int tag = 0;

while (!empty(a))

cout << endl;

}else

}else //終結符號

else

}} cout << "成功匹配!"

}

CSUFT 編譯原理實驗二LL(1)文法分析

1 include 2 include 3 include 4 include 5 include 6 include 7 include 8 include 9 10using namespace std 1112 char a 20 分析棧 13char b 20 剩餘串 14char v1 2...

編譯原理之證明LL 1 文法

ll 1 文法的證明方法 乙個文法g是ll 1 的,當且僅當g的任意兩個不同的產生式a 滿足下面的條件 1.不存在終結符號a使得 和 都能夠推導出以a開頭的串。2.和 中最多只有乙個可以推導出空串。3.如果 那麼 不能推導出任何以follow a 中某個終結符號開頭的串。類似的,如果 那麼 不能推導...

LL 1 文法判斷

ll 1 文法判斷 題型 1.判斷該文法是否是ll 1 文法?2.若是,給出它的ll 1 分析表,否則說明理由。概念 對於產生式 a 1.如果 均不能推導出 空語句 則 first first 2.和 至多有乙個能推導出 3.如果 經過0步或多步可以推導出 則 first follow a 關鍵 求...