编译原理语法分析器递归下降法求助

本文讨论了在编译原理中使用递归下降法进行语法分析时遇到的error sentence问题。文章深入分析了该问题的成因,并探讨了解决此类问题的可能策略。
摘要由CSDN通过智能技术生成
#include "stdio.h"  
#include "string.h"  
  
  
char prog[100],token[8],ch;  
char *rwtab[6]={"begin","if","then","while","do","end"};  
int syn,p,m,n,sum;  
int kk;  
  
void factor(void);  
void expression(void);  
void yucu(void);  
void term(void);  
void statement(void);  
void lrparser(void);  
void scaner(void);  
void ifblock(void);
void whileblock(void);
void judge(void);
  
void main(void)  
{  
    p=kk=0;  
    printf("\nplease input a string (end with '#'): \n");  
  
    do  
    {  
        scanf("%c",&ch);  
        prog[p++]=ch;  
    }while(ch!='#');  
  
    p=0;  
    scaner();  
    lrparser();  
    //getch();  
}  
  
void lrparser(void)  
{  
    if(syn==1)          //begin
    {   
        scaner();       /*读下一个单词符号*/  
        yucu();         /*调用yucu()函数;*/  
        if(syn==6)      /*读到end,如果跟在后面的是#则结束*/
        {  
            scaner();  
            if((syn==0)&&(kk==0))  
            printf("success!\n");  
        }  
        else  
        {  
            if(kk!=1) printf("the string haven't got a 'end'!\n");  
            kk=1;  
        }  
    }  
    else  
    {   
        printf("haven't got a 'begin'!\n");  
        kk=1;  
    }  
      
    return;  
}  
  
void yucu(void)  
{   
if(syn == 2)            //判断if
{
ifblock();
}
if(syn == 4)            //判断while
{
whileblock();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值