PL/0语言词法及语法分析系统的设计与实现
2007-03-15 21:55:30 来源:WEB开发网下面我们来实现这个两个分析器。这两个分析器采用一个类CCompiler来实现,这个类的定义如下:
//编译类class CCompiler
其中:函数bool LexAnalysis(char *szStr);是对输入字符串szStr采用循环分支方法进行词法分析,分析出来的符号放在符号表m_vectorSymbol中,这个符号表采用向量这个数据结构来表示。词法分析得出符号表后,即进入语法分析阶段,语法分析由函数void SyntaxAnalysis();完成。下面这些函数是各非终结符对应的递归子程序。
{
public:
CCompiler();
virtual ~CCompiler();
public:
void Compile(char *szFile);//编译,公共接口
vector<SYNTAXERR> GetSyntaxErr(){return m_vectorSyntaxErr;};//得到语法错误
protected:
bool LexAnalysis(char *szStr); //词法分析
bool IsOprSym(char *szStr); //是否为运算符
bool IsBndSym(char *szStr); //是否为界符
bool IsKeyWord(char *szStr); //是否为关键字
bool IsInSymbolTab(char *szStr); //是否已在符号表中
char* JumpNoMatterChar(char *szStr);//跳过空格,回车,换行符,Tab
void OutSymbolTab(char *szFile);//输出符号表到文件
void SyntaxAnalysis();//语法分析
void SyntaxAnalysis_Prog();
bool SyntaxAnalysis_Mop();
bool SyntaxAnalysis_Integer();
bool SyntaxAnalysis_Aop();
bool SyntaxAnalysis_Lop();
int SyntaxAnalysis_Id();
int SyntaxAnalysis_Block();
int SyntaxAnalysis_Body();
int SyntaxAnalysis_Factor();
int SyntaxAnalysis_Term();
int SyntaxAnalysis_Lexp();
int SyntaxAnalysis_Exp();
int SyntaxAnalysis_Statement();
int SyntaxAnalysis_Const();
int SyntaxAnalysis_Proc();
int SyntaxAnalysis_Vardecl();
int SyntaxAnalysis_Condecl();
protected:
int m_iVecotrSymbolSize; //符号表大小
int m_iCurPointer; //符号表中当前指针
vector<LEXPROPERTYVS> m_vectorSymbol;//符号表
vector<SYNTAXERR> m_vectorSyntaxErr; //语法错误代码
}; bool SyntaxAnalysis_Mop();
bool SyntaxAnalysis_Integer();
bool SyntaxAnalysis_Aop();
bool SyntaxAnalysis_Lop();
int SyntaxAnalysis_Id();
int SyntaxAnalysis_Block();
int SyntaxAnalysis_Body();
int SyntaxAnalysis_Factor();
int SyntaxAnalysis_Term();
int SyntaxAnalysis_Lexp();
int SyntaxAnalysis_Exp();
int SyntaxAnalysis_Statement();
int SyntaxAnalysis_Const();
int SyntaxAnalysis_Proc();
int SyntaxAnalysis_Vardecl();
int SyntaxAnalysis_Condecl();
以上我介绍了词法及语法分析核心的设计实现,下面我简单介绍下IDE的实现和IDE与分析核心之间的通信。本系统的IDE与分析核心之间采用管道通信,代码如下:
- ››PLSQL中配置远程数据库连接
- ››PL/SQL Cursor双嵌套的应用
- ››pl/sql获取工作时间
- ››Pl/SQL 从零开始
- ››Places Directory for Android试用
- ››PlayPad 手机音频播放器
- ››Planetbeing解锁iPhone 4最新工作进度更新
- ››Plastic Jelly Styles
- ››Platform engine using Box2D
- ››Platform engine using Box2D – Step 2
- ››Platform engine using Box2D – Step 3
- ››PL/SQL块定义部分之一标量类型
更多精彩
赞助商链接