www.pudn.com > Yacc.zip > syntax.h, change:2014-05-13,size:1862b


#ifndef SYNTAX_H 
#define SYNTAX_H 
 
#include <cstdio> 
#include <cstring> 
#include <iostream> 
#include <fstream> 
#include <iomanip> 
#include <vector> 
#include <stack> 
#include "structs.h" 
 
using namespace std; 
 
//语法、语义分析器类 
class Syntax 
{ 
private: 
    ifstream inFile;    //输入文件 
    ofstream synFile, ersFile;  //输出文件与错误文件 
 
    vector<Word> wordlist;  //单词序列(词法分析结果) 
    vector<Word>::iterator ptr; //单词序列指针 
    vector<IdType> idlist;  //标识符序列 
    vector<IdType>::iterator idptr; //标识符序列指针 
 
    stack<Word> opnd;   //操作数栈 
    stack<Word> optr;   //运算符栈 
 
    int id_index;   //标识符索引 
    int lp_index;   //循环体索引 
 
    void TellError(const char * reason);   //报告错误 
 
    //递归下降分析器 
    void Deal_Prg(); 
    void Deal_Stc(); 
    void Deal_Sas(); 
    void Deal_Swh(); 
    void Deal_Exr(); 
    void Deal_Cmp(int * _detail);    //参数为返回的比较运算符的详细属性字 
    void Deal_Add(bool _sign, struct Word * word = NULL);  //_sign:对于“+”、“-”,表示正负时为true,表示加减时为false 
                                                           //word:参数为返回的运算符 
    void Deal_Mul(struct Word * word = NULL);   //参数为返回的运算符 
    void Deal_Val(struct Word * word = NULL);   //参数为返回的单词 
    void Deal_Int(int * int_val = NULL);  //参数为返回的整数值 
    void Deal_Exp(); 
    void Deal_Ex1(); 
    void Deal_Ext(); 
    void Deal_Et1(); 
 
    int Id_To_Index(const char * id);  //由标识符查找索引,不存在返回-1 
    char GetOptrPri(struct Word * word1, struct Word * word2);  //查找运算符优先级 
 
     
public: 
    Syntax(char * fn_in, char * fn_syn, char * fn_ers);  //构造函数 
    ~Syntax(); //析构函数 
    void MakeTree(); //构造语法树 
    void WriteAsm(); //生成汇编语言 
    bool Ready(); //是否就绪 
}; 
 
#endif