好文档 - 专业文书写作范文服务资料分享网站

预测分析算法的设计与实现 

天下 分享 时间: 加入收藏 我要投稿 点赞

.

预测分析算法的设计与实现

程序代码:

#include \#include \

#define MaxRuleNum 8 #define MaxVnNum 5 #define MaxVtNum 5 #define MaxStackDepth 20 #define MaxPLength 20 #define MaxStLength 50

struct pRNode /*产生式右部结构*/ {

int rCursor;

struct pRNode *next; };

struct pNode {

int lCursor;

int rLength; /*右部长度*/

struct pRNode *rHead; /*右部结点头指针*/ };

char Vn[MaxVnNum + 1]; /*非终结符集*/ int vnNum;

char Vt[MaxVtNum + 1]; /*终结符集*/ int vtNum;

struct pNode P[MaxRuleNum]; int PNum;

char buffer[MaxPLength + 1];

1 / 24'.

.

char ch;

char st[MaxStLength]; /*要分析的符号串*/

struct collectNode {

int nVt;

void ShowAT();/*输出分析表*/ void Identify(char *st); void InitStack(); void ShowStack(); void Pop(); void Push(int r);

int main() {

char todo,ch; Init(); InputVn(); InputVt(); InputP(); getchar(); FirstFollow();

printf(\所得first集为:\ ShowCollect(first);

printf(\所得follow集为:\ ShowCollect(follow); CreateAT(); ShowAT(); todo = 'y';

while('y' == todo) {

printf(\是否继续进行句型分析?(y / n):\ todo = getchar();

while('y' != todo && 'n' != todo) {

printf(\ todo = getchar(); }

2 / 24'.

.

if('y' == todo) { int i; InitStack();

printf(\请输入符号串(以#结束) : \ ch = getchar(); i = 0;

while('#' != ch && i < MaxStLength) {

st[i] = ch; Identify(st); } else

printf(\输入出错!\\n\ } }

getchar(); }

void Init() {

int i,j; vnNum = 0; vtNum = 0; PNum = 0;

for(i = 0; i <= MaxVnNum; i++) Vn[i] = '\\0';

for(i = 0; i <= MaxVtNum; i++) Vt[i] = '\\0';

for(i = 0; i < MaxRuleNum; i++) {

P[i].lCursor = NULL; P[i].rHead = NULL; P[i].rLength = 0; }

PNum = 0;

for(i = 0; i <= MaxPLength; i++) }

3 / 24'.

.

}

int IndexCh(char ch) { int n;

n = 0; /*is Vn?*/

while(ch != Vn[n] && '\\0' != Vn[n]) n++;

if('\\0' != Vn[n]) return 100 + n; n = 0; /*is Vt?*/

while(ch != Vt[n] && '\\0' != Vt[n]) n++;

if('\\0' != Vt[n]) return n; return -1; }

/*输出Vn或Vt的内容*/

void ShowChArray(char* collect) {

int k = 0;

while('\\0' != collect[k]) {

printf(\ }

printf(\}

/*输入非终结符*/ void InputVn() { {

Vn[n++] = '\\0'; } n = 0;

while(('#' != ch) && (n < MaxVnNum)) {

if(' ' != ch && '\\n' != ch && -1 == IndexCh(ch)) {

4 / 24'.

.

Vn[n++] = ch; vnNum++; }

ch = getchar(); }

Vn[n] = '#'; /*以\标志结束用于判断长度是否合法*/ k = n; if('#' != ch) {

if( '#' != (ch = getchar())) {

while('#' != (ch = getchar())) ;

printf(\符号数目超过限制!\\n\ inErr = 1; continue; } {

printf(\输入正确确认?(y/n):\ }

scanf(\ }

if('n' == ch) {

printf(\录入错误重新输入!\\n\ inErr = 1; } else {

inErr = 0; } } }

/*输入终结符*/ void InputVt() {

int inErr = 1; int n,k;

5 / 24'.

预测分析算法的设计与实现 

.预测分析算法的设计与实现程序代码:#include\#include\#defineMaxRuleNum8#defineMaxVnNum5#defineMaxVtNum5#defineMaxStackDepth20#defineMaxPLength20#defineM
推荐度:
点击下载文档文档为doc格式
1udi3733in7yqpo85se79mzf00wrvr00ivk
领取福利

微信扫码领取福利

微信扫码分享