problem description
學過編譯原理的菊苣們都知道算符優先文法,作為乙個有點深度的分析方法,我們怎麼能只止步於理論呢,實踐才是王道哦。
已知文法g[s]的表示式,求算符優先關係表。因為某些特殊的原因,我們在這規定一下輸入輸出格式。
已知文法g[s]為:
s`->#s#(拓展文法,不是題目給出的文法)
s->a|@|(t)
t->t,s|s
表示式算符優先關係表中從左到右(從上到下)的順序為從表示式文法中從左到右從上到下的順序即為
a @ ( ) , # (我們預設把#放在最右邊或者最下邊)
input
多組輸入。第一行輸入乙個n,表示表示式的個數,接下來n行每行乙個表示式(記得還有乙個要在自己程式中新增的拓展文法哦)
output
根據上述的格式,輸出算符優先關係表(輸出的格式用水平製表符\t)
sample input 2
s->a|@|(t)
t->t,s|s
sample output
a @ ( ) , #a > > >
@ > > >
( < < < = <
) > > >
, < < < > >
# < < < =
#include #include #include #include #include #include #include #include #include #include #include #include #pragma comment(linker, "/stack:102400000,102400000")
typedef long long ll;
const int inf=0x3f3f3f3f;
const double pi= acos(-1.0);
const double esp=1e-6;
using namespace std;
const int maxn=110;
const int maxn=20;
char str[maxn][maxn];//輸入文法
char st[maxn];//輸入串
char stac[maxn];//模擬棧的陣列
char nstr[maxn][maxn];//儲存轉化文法
char mstr[maxn][maxn];
char fin[maxn];//儲存終結符
char firstvt[maxn][maxn],lastvt[maxn][maxn];
char cmp[maxn][maxn];//儲存表中的比較符
int firstflag[maxn],lastflag[maxn];//非終結符的firstvt,lastvt是否求出
int fcnt[maxn],lcnt[maxn];//非終結符firsvt和lastvt的個數
int is_fin(char c)
return 0;
}int site(char c)
}void get_firstvt(char s,int t)
}nstr[x][y]='\0';
x++;
y=0;
}//對於s1->#s#;
char a='#';
cmp[site(a)][site(a)]='=';
for(i=0; i';
}//對於初始的文法
for(i=0; i';
}if(is_fin(nstr[i][j])&&!is_fin(nstr[i][j+1]))
void exchange()
}mstr[ecnt][mcnt]='\0';
if(strlen(mstr[ecnt])!=0)
ecnt++;
}}int main()
}fin[cnt++]='#';
fin[cnt]='\0';
output_firstvt(t);
output_lastvt(t);
get_table(t,cnt);
}return 0;
}
算符優先系列之 二 算符優先關係表
算符優先系列之 二 算符優先關係表 time limit 1000 ms memory limit 65536 kib problem description 學過編譯原理的菊苣們都知道算符優先文法,作為乙個有點深度的分析方法,我們怎麼能只止步於理論呢,實踐才是王道哦。已知文法g s 的表示式,求算...
算符優先分析
算符優先分析 time limit 1000 ms memory limit 65536 kib problem description 演算法優先分析法是一種不太規範的自下而上分析方法,分析速度快,特別適用於表示式的分析。為了便於大家理解和實踐算符優先分析法,本題目先給出乙個算符優先文法,請大家構...
算符優先分析
1.已知算符優先關係矩陣如下表 ii 寫出符號串 i i i 的算符優先分析過程。棧關係 輸入串動作 i i i 移進 i i i 移進 i i i 歸約 n i i 移進 n i i 移進 n i i 歸約 n n i 歸約 n i 移進 n i 歸約 n i 移進 n i 移進 n i 歸約 n...