繁体   English   中英

C语言中的递归下降解析器-跳过epsilon生产

[英]Recursive Descent Parser in C - skipping over epsilon productions

构造递归下降解析器以解析以下语法。 有没有一种方法可以使我在不为所有epsilon生产返回任何东西的情况下返回? (考虑此方法,如代码所示,我正在解析)

E = TG
G = + TG | Ë
T =跳频
H = * FH | Ë
F =(E)| ID

#include <stdio.h>

char* next;

int terminal(char);
int E();int G();int G1();int G2();int T();int H();int H1();int H2();int F();int F1();int F2();

int main(int argc, char const *argv[])
{
    char str[10];
    printf("Enter an expression to be parsed : ");
    scanf("%s", str);
    next = &str[0]
    (*next == '\0' && E() == 1) ? printf("Parsed Successfully\n") : printf("Parsed Unsuccessfully\n");
    return 0;
}

int terminal(char token){return *next++ == token;}
int E(){return T() && G();}
int G(){char* temp = next; return (next = temp, G1()) || (next = temp, G2());}
int G1(){return terminal('+') && T() && G();}
int G2(){return;}   //ERROR : non-void function should return a value
int T(){return F() && H();}
int H(){char* temp = next; return (next = temp, H1()) || (next = temp, H2());}
int H1(){return terminal('*') && F() && H();}
int H2(){return;}   //ERROR : on-void function should return a value
int F(){char* temp = next; return (next = temp, F1()) || (next = temp, F2());}
int F1(){return terminal('(') && E() && terminal(')');}
int F2(){return terminal('a');}

该代码不可读。 但是逻辑表明您应该返回一个布尔值。 空的生产总是成功的。 因此它应该返回true。 例如,

 int H2(){return true;} 

自然地,内联这样琐碎的作品将是有意义的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM