编译原理 语法分析器
Posted WangFeng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编译原理 语法分析器相关的知识,希望对你有一定的参考价值。
当一个文法满足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; } } }
以上是关于编译原理 语法分析器的主要内容,如果未能解决你的问题,请参考以下文章