【编译原理】语义分析S属性定义的自下而上计算

您所在的位置:网站首页 计算器的构造原理 【编译原理】语义分析S属性定义的自下而上计算

【编译原理】语义分析S属性定义的自下而上计算

2024-07-10 00:12| 来源: 网络整理| 查看: 265

#include

#include

#include

using namespace std;

/*

E->E+T

E->T

T->T*F

T->F

F->(E)

F->id

*/

/*初始化分析表*/

void Initial(string analysis[12][9]){

         /*移进规约*/

         analysis[0][0] = "s5"; analysis[0][3] = "s4"; analysis[0][6] = "1"; analysis[0][7] = "2"; analysis[0][8] = "3";

         analysis[1][1] = "s6"; analysis[1][5] = "acc";

         analysis[2][1] = "r2"; analysis[2][2] = "s7"; analysis[2][4] = "r2"; analysis[2][5] = "r2";

         analysis[3][1] = "r4"; analysis[3][2] = "r4"; analysis[3][4] = "r4"; analysis[3][5] = "r4";

         analysis[4][0] = "s5"; analysis[4][3] = "s4"; analysis[4][6] = "8"; analysis[4][7] = "2"; analysis[4][8] = "3";

         analysis[5][1] = "r6"; analysis[5][2] = "r6"; analysis[5][4] = "r6"; analysis[5][5] = "r6";

         analysis[6][0] = "s5"; analysis[6][3] = "s4"; analysis[6][7] = "9"; analysis[6][8] = "3";

         analysis[7][0] = "s5"; analysis[7][3] = "s4"; analysis[7][8] = "10";

         analysis[8][1] = "s6"; analysis[8][4] = "ss";//表示s11

         analysis[9][1] = "r1"; analysis[9][2] = "s7"; analysis[9][4] = "r1"; analysis[9][5] = "r1";

         analysis[10][1] = "r3"; analysis[10][2] = "r3"; analysis[10][4] = "r3"; analysis[10][5] = "r3";

         analysis[11][1] = "r5"; analysis[11][2] = "r5"; analysis[11][4] = "r5"; analysis[11][5] = "r5";

         /*出现错误*/

         analysis[0][1] = analysis[0][2] = analysis[0][5] = analysis[4][1] = analysis[4][2] = analysis[4][5] = "e1";

         analysis[6][1] = analysis[6][2] = analysis[6][5] = analysis[7][1] = analysis[7][2] = analysis[7][5] = "e1";

         analysis[0][4] = analysis[1][4] = analysis[4][4] = analysis[6][4] = analysis[7][4] = "e2";

         analysis[1][0] = analysis[1][2] = analysis[1][3] = analysis[8][0] = analysis[8][2] = analysis[8][3] = "e3";

         analysis[8][5] = "e4";

         analysis[2][0] = analysis[2][3] = "r2";

         analysis[3][2] = analysis[3][3] = "r4";

         analysis[5][0] = analysis[5][3] = "r6";

         analysis[9][0] = analysis[9][3] = "r1";

         analysis[10][0] = analysis[10][3] = "r3";

         analysis[11][0] = analysis[11][3] = "r5";

 

}

/*输出移进还是规约,规约的话输出用到的产生式*/

void print(int into)

{

         if (into == 0)

         {

                  cout



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3