寫在前面:切記不要刪除**部分對於函式的宣告,以免造成error!!!通過函式的宣告避免函式定義的先後順序
遞迴子程式法是一種確定的自頂向下語法分析方法,要求文法是ll(1)文法。它的實現思想是對應文法中每個非終結符編寫乙個遞迴過程,每個過程的功能是識別由該非終結符推出的串,當某非終結符的產生式有多個候選式時能夠按ll(1)形式唯一地確定選擇某個候選式進行推導。請根據下面的表示式ll(1)文法,構造遞迴子程式,完成對表示式的語法分析。
表示式文法如下:
e→tg
g→+tg | ε
t→fs
s→*fs | ε
f→(e) | i
對於給定的輸入串(長度不超過50個符號),請輸出分析過程中用到的所有產生式,並指明該輸入串是否為該文法能生成的表示式,輸出共11行,前10行每行兩個資料用空格隔開,表示推導時所用產生式順序號(從0開始),最後一行是accept,表示i+i*i是文法能生成的合法表示式。注:其中&符號代表文法中的ε符號。
例如:
i+i*i是文法能生成的乙個表示式,輸出格式如下:
0 e-->tg
1 t-->fs
2 f-->i
3 s-->&
4 g-->+tg
5 t-->fs
6 f-->i
7 s-->*fs
8 f-->i
9 s-->&
10 g-->&
accept
i@i不是文法能生成的表示式,輸出共5行,前5行每行兩個資料用空格隔開,表示推導時所用產生式序號(從0開始),最後一行是error,表示i@i不是文法能生成的表示式。@不是合法的文法符號,輸出格式舉例:
0 e-->tg
1 t-->fs
2 f-->i
3 s-->&
4 g-->&
error
(i+i*i不是文法能生成的表示式,存在括號不匹配的語法錯誤,輸出格式舉例:
0 e-->tg
1 t-->fs
2 f-->(e)
3 e-->tg
4 t-->fs
5 f-->i
6 s-->&
7 g-->+tg
8 t-->fs
9 f-->i
10 s-->*fs
11 f-->i
12 s-->&
13 g-->&
error
input
輸入資料只有一行,代表待分析的符號串,以#號結束
output
輸出推導過程中所有的產生式,按照使用順序給出。輸出詳細說明見題目描述中的例子。
sample input
i+i*i#
sample output
0 e-->tg
1 t-->fs
2 f-->i
3 s-->&
4 g-->+tg
5 t-->fs
6 f-->i
7 s-->*fs
8 f-->i
9 s-->&
10 g-->&
accept
hint
source
1.c++實現
#include#include#include#include//exit(0)函式標頭檔案
using namespace std;
char str[100];
int num = 0;
int cur = 0;
void e();
void f();
void g();
void t();
void s();
void s()else
printf("%d s-->&\n",num++);
}void g()else
printf("%d g-->&\n",num++);
}void f()else if(str[cur] == '(')else
}else
}void t()
void e()
int main()
2.c語言實現
#includechar a[1000],b[1000];int top=0,j,l;
int main()
}a[top++]='e';
for(j=0;top>0;)
else if(a[top-1]=='g')
else if(c[j]=='+')
else
}else if(a[top-1]=='t')
else if(a[top-1]=='s')
else if(c[j]=='*')
else
}else if(a[top-1]=='f')
else if(c[j]=='i')
else
}else
else
break;
}//printf("1\n");
}if(top==0&&c[j]=='#')
printf("accept\n");
else
printf("error\n");
}
表示式語法分析 遞迴子程式法
time limit 1000ms memory limit 65536kb submit statistic problem description 遞迴子程式法是一種確定的自頂向下語法分析方法,要求文法是ll 1 文法。它的實現思想是對應文法中每個非終結符編寫乙個遞迴過程,每個過程的功能是識別由...
表示式語法分析 遞迴子程式法
time limit 1000ms memory limit 65536kb submit statistic problem description 遞迴子程式法是一種確定的自頂向下語法分析方法,要求文法是ll 1 文法。它的實現思想是對應文法中每個非終結符編寫乙個遞迴過程,每個過程的功能是識別由...
表示式語法分析 遞迴子程式法
表示式語法分析 遞迴子程式法 time limit 1000 ms memory limit 65536 kib submit statistic problem description 遞迴子程式法是一種確定的自頂向下語法分析方法,要求文法是ll 1 文法。它的實現思想是對應文法中每個非終結符編寫...