WEB开发网
开发学院软件开发VC PL/0语言词法及语法分析系统的设计与实现 阅读

PL/0语言词法及语法分析系统的设计与实现

 2007-03-15 21:55:30 来源:WEB开发网   
核心提示: 下面我们来实现这个两个分析器,这两个分析器采用一个类CCompiler来实现,PL/0语言词法及语法分析系统的设计与实现(2),这个类的定义如下://编译类class CCompiler{public:CCompiler();virtual ~CCompiler();public:void

下面我们来实现这个两个分析器。这两个分析器采用一个类CCompiler来实现,这个类的定义如下:

//编译类class CCompiler
{
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 LexAnalysis(char *szStr);是对输入字符串szStr采用循环分支方法进行词法分析,分析出来的符号放在符号表m_vectorSymbol中,这个符号表采用向量这个数据结构来表示。词法分析得出符号表后,即进入语法分析阶段,语法分析由函数void SyntaxAnalysis();完成。下面这些函数是各非终结符对应的递归子程序。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与分析核心之间采用管道通信,代码如下:

上一页  1 2 3 4  下一页

Tags:PL 词法

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接