各类参看书都会给的一个例子:
LL(0)文法
G[E]: 其中
E→TG G为E’
G→+TG|∧ ∧为ε
T→FS S为T’
S→*FS|∧
F→i|(E)
递归向分析法为每一个非终结符建立相应的子程序,然后模拟语法树自动向下推倒,在推倒过程中遇到终结符则检查是否匹配,遇到非终结符则调用相应的子程序处理。
读入一个以#结尾的符号串s,指针k初始化指向s[0];
递归的框架:
E:调用T ; 调用G; return;
G:if (s[k]=='+') {++k; 调用T ; 调用G; return;}
else return; //推出空自动匹配
T:调用F; 调用S; return;
S:if (s[k]=='*') {++k; 调用F; 调用S; return;}
else return; //推出空自动匹配
F:if (s[k]=='i') {++k; return;}
else if (s[k]=='(') { ++k;调用T;if (s[k]==')') {++k; return;}
else error;
else error
在递归过程中加上必要推导输出信息即可完成分析程序。