一.实验内容
已知文法G[S]:
S →(A)|aAb
A →eA’|dSA’
A’ →dA’|ε
二.实验要求:
1.给出文法的FIRST集和FOLLOW集。
2.设计相应的例子进行测试,判断输入所给句子是否是合法的句子。
三、我的代码
已知文法G[S]:
S →(A)|aAb
A →eA’|dSA’
A’ →dA’|ε
二.实验要求:
1.给出文法的FIRST集和FOLLOW集。
2.设计相应的例子进行测试,判断输入所给句子是否是合法的句子。
三、我的代码
- #include <stdio.h>
- /*
- *First(S)={(, a}
- *First(A)={e, d}
- *First(A')={d, ε}
- *Follow(S)={#, d, b, )} First(A') + Follow(A)
- *Follow(A)={b, )}
- *Follow(A')={b, )} Follow(A)
- */
- char str[100];
- int length;
- int lookhead;
- void S();
- void A();
- void A2();
- void error() {
- lookhead == 0;
- }
- void S()
- {
- if(str[lookhead] == '(' || str[lookhead] == 'a')
- {
- lookhead++;
- A();
- }
- else {
- error();
- }
- }
- void A()
- {
- if(str[lookhead] == 'e') {
- lookhead++;
- A2();
- } else if(str[lookhead] = 'd') {
- lookhead++;
- S();
- lookhead++;
- A2();
- } else {
- error();
- }
- }
- void A2()
- {
- if(str[lookhead] == 'd') {
- lookhead++;
- A2();
- } else if(str[lookhead] == ')' || str[lookhead] == 'b'){
- lookhead++;
- }
- }
- int main()
- {
- printf("请输入测试字符串:\n");
- while(1)
- {
- lookhead = 0;
- char c=' ';
- int i = 0;
- while(c!='#' && c!='$')
- {
- scanf("%c", &c);
- str[i++] = c;
- }
- getchar();
- length = i;
- S();
- if(lookhead == length-1) {
- printf("该句子合法\n");
- } else {
- printf("该句子不合法\n");
- }
- }
- return 0;
- }
您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助
赏