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

2021-09-29 15:35:14 字數 2247 閱讀 7038

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...