📄 share.h
字号:
#ifndef SHAREFILE
#define SHAREFILE
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <fstream>
#include <iostream>
#include "Symboltable.h"
#include <Windows.h>
//记号类别定义
#define KEYWORD 0
#define DESIGNATOR 1
#define ASSIGN_OP 2
#define ADD_OP 3
#define MUL_OP 4
#define NUM 5
#define RELOP 6
#define NOMORE -1
#define INVALIDETYPE -1
struct KeyWord
{
char cName[15];
char cReturnName;
};
struct TOKEN
{
int iType; //记号类别,可以取上面定义的值
double dProperty; //记号属性
unsigned int iPosition; //该记号所在的行数
};
//数据类型内部标识
#define INTEGER 0
#define REAL 1
#define INTARRAY 2
#define REALARRAY 3
#define BOOL 4
#define FUNCTION 5
#define PROC 6
//各数据类型的存储字节数
#define INTWIDTH 2
#define REALWIDTH 2
//变量起始地址
#define DATAADDRESS 0
//词法分析函数
//token用于返回下一记号的相关信息
//flag=0只是查看下一个记号,而不移动指针(下次读取是仍返回同样的记号)
//flag=1则移动指针
TOKEN accidence(ifstream &infile,int &irow,int flag);//词法分析器,返回单词
int Clearzhushi(ifstream &infile);//消除注释
char KeyWordSearch(char* ca);//查找关键字
//语法分析、语义分析处理函数
bool Program(); //语法分析主程序
void WriteError(char* strErr,int iLine); //记录错误,参数为错误信息,出错行号
bool IdentifierList(); //标识符列表
bool Declations(); //声明
bool Declation1(int *num); //H
bool Declation2(int iPlace,int *iType,int *iTypelen,int *iDomain,int *num); //H'
bool Declation(int iPlace,int *num); //G
bool SubprogramDeclarations(); //子程序声明
bool SubprogramDeclaration();//子程序声明
bool SubprogramHead(int *iPlace);
bool Arguments(int iPlace,int *num);//M
bool Arguments1(int iPlace,int *num);//G'
bool CompoundStatement(char *); //复合语句
bool OptionalStatements(char*);
bool Statement(char*);
bool StatementList(char*);
bool Variable(int iPlace,char*);
bool Expression(int *iPlace,char *buffer); //S
bool Expression1(int *iPlace,char *buffer); //W
bool ExpressionList(int *iPlace,int * num,char *buffer); //U
bool SimpleExpression(int *iPlace,char *buffer);//V
bool Factor(int *iPlace,char *buffer); //Z
bool Factor1(int *iPlace,char*buffer); //X
bool Term(int *iPlace,char *buffer); //T
bool SimpleExpression1(int *iPlace,char *buffer);//Y
bool Type(int *iType,int *iTypelen,int *iDomain); //获取类型
bool Type1(int *iType,int *iTypelen,int *iDomain); //获取类型 J
void WriteCode(char *cCode); //写入三地址代码
//操作符号表
void SetTokenProperty(int iPointer,int iType,int iAddress,int iDomain);
int GetType(int iPointer);
int Insert(int iType); //插入指定类型的变量
//代码生成
void asmCode();
void getCodeAndTranslate();
void translateCode(int k,string t);
void dealIf(string s);
void dealGoto(string s);
void dealArray(string s);
void dealVar(string s);
void readNum();
void writeNum();
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -