当一个文法满足LL(1)条件时,我们就可以为它构造一个不带回溯的自上而下分析程序,这个分析程序是由一组递归过程组成的,每个过程对应文法的一个非终结符。这样的一个分析程序成为递归下降分析器。
例:一个支持 +,*,(,) 的简单文法为(用$表示空字符):
E -> TE‘
E -> +TE‘ | $
T -> FT‘
T‘ -> *FT‘ | $
F -> (E) | i
《编译原理》 第三版(陈火旺)P74:
#include "iostream" #include "cstdio" #include "cstring" using namespace std; char a[100]; int len; int p; char sym; bool ok; void E(); void E2(); void T(); void T2(); void F(); void init() { len = strlen(a); ok=true; p=0; } void getNext() { sym = a[p++]; } int main() { freopen("in.txt","r",stdin); while(cin>>a) { init(); getNext(); E(); cout<<a<<endl; if(ok)cout<<"Success"<<endl; else cout<<"Error"<<endl; } return 0; } void E() { T(); E2(); } void E2() { if(sym==‘+‘) { getNext(); T(); E2(); } } void T() { F(); T2(); } void T2() { if(sym==‘*‘) { getNext(); F(); T2(); } } void F() { if( sym==‘i‘ ) { getNext(); } else { if(sym==‘(‘) { getNext(); E(); if(sym==‘)‘) { getNext(); } else { ok = false; return; } } else { ok = false; return; } } }
时间: 2024-10-29 19:10:08