算符優先系列之(一)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 演算法優先分析法是一種不太規範的自下而上分析方法,分析速度快,特別適用於表示式的分析。為了便於大家理解和實踐算符優先分析法,本題目先給出乙個算符優先文法,請大家構...