算符優先系列之 一 Firstvt和Lastvt集

2021-09-29 19:32:50 字數 2608 閱讀 3246

算符優先系列之(一)firstvt和lastvt集

time limit: 1000 ms memory limit: 65536 kib

problem description

學過編譯原理的菊苣們都知道算符優先文法,作為乙個有點深度的分析方法,我們怎麼能只止步於理論呢,實踐才是王道哦。

已知文法g[s]的表示式,計算g[s]的firstvt和lastvt。因為某些特殊的原因,我們在這規定一下輸入輸出格式。

例如:已知文法g[s]為:

s->a|@|(t)

t->t,s|s

首先先把各條件語句按照從左到右從上到下的方式分解和輸出

s->a

s->@

s->(t)

t->t,s

t->s

對於輸出首先輸出firstvt集然後輸出lastvt集,對於各自的集合的的輸出按照非終結符從上向下的方式

firstvt[s]:非終結符+空格的形式

firstvt[t]:

lastvt[s]:

lastvt[t]:

input

多組輸入。第一行輸入乙個n,表示表示式的個數,接下來n行,每行乙個表示式

output

根據上述的格式,輸出文法的firstvt和lastvt集合

sample input

2

s->a|@|(t)

t->t,s|s

sample output

firstvt[s]:a @ ( 

firstvt[t]:, a @ (

lastvt[s]:a @ )

lastvt[t]:, a @ )

#include #include #include #include #include #include #include #include #include #include #include #include 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)

if(!firstflag[i])

else

if(str[i][j+1]!=s)

for(jj=0; jj; jj++)

if(tt==k)}}

}}} firstvt[i][k]='\0'

; fcnt[i]=k;

firstflag[i]=1;}}

void output_firstvt(int t)

for(int i=0; i; i++)

puts(""

);}}

void get_lastvt(char s,int t)

if(!lastflag[i])

else

if(str[i][j]!=s)

for(jj=0; jj; jj++)

if(tt==k)}}

}}} lastvt[i][k]='\0'

; lcnt[i]=k;

lastflag[i]=1;}}

void output_lastvt(int t)

for(int i=0; i; i++)

puts(""

);}}

void output(int i,int j,char *str)

int main()

for(int i=0; i; i++)

} fin[cnt++]='#'

; fin[cnt]='\0'

; output_firstvt

(t);

output_lastvt

(t);

} return 0;

}

算符優先系列之 二 算符優先關係表

算符優先系列之 二 算符優先關係表 time limit 1000 ms memory limit 65536 kib problem description 學過編譯原理的菊苣們都知道算符優先文法,作為乙個有點深度的分析方法,我們怎麼能只止步於理論呢,實踐才是王道哦。已知文法g s 的表示式,求算...

算符優先系列之 二 算符優先關係表

problem description 學過編譯原理的菊苣們都知道算符優先文法,作為乙個有點深度的分析方法,我們怎麼能只止步於理論呢,實踐才是王道哦。已知文法g s 的表示式,求算符優先關係表。因為某些特殊的原因,我們在這規定一下輸入輸出格式。已知文法g s 為 s s 拓展文法,不是題目給出的文法...

算符優先分析

算符優先分析 time limit 1000 ms memory limit 65536 kib problem description 演算法優先分析法是一種不太規範的自下而上分析方法,分析速度快,特別適用於表示式的分析。為了便於大家理解和實踐算符優先分析法,本題目先給出乙個算符優先文法,請大家構...