⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 compiler.h

📁 编译原理的作业 编译器
💻 H
字号:
#ifndef COMPILER_H_
#define COMPILER_H_

#include "type.h"
#include "lexer.h"

struct Error
{
	int _errorNo;
	Line _line;
};

class Compiler
{
public:
	Compiler();
	~Compiler();
	void ParseLine(Line& line);
	void Compile(File& file);
	void CodeGen();
	void ListGen();
	void DumpMethods();
	void DumpFields();
	void DumpFileHeader();
	void DumpStringPool();
	void DumpILCode();
	void MetaDataGen();
	void ILGen();
private:
	//=========================================================================
	//Program := Functions | e
	//Function := Attribute Type FunctionName ArgumentList {ILCode}
	//Attribute := .entry | e //(Further Consideration include public private static and inline)
	//Type := void | NormalType
	//NormalType := s8 | u8| s16 | u16 | s32 | u32 | s64 | u64 | f32 | f64
	//FunctionName = string
	//string := [a-zA-Z_]+[a-zA-Z0-9_]*
	//ArgumentWithComma := (Argument,)*
	//Argument := NormalType AgrumentName
	//ArgumentName := string
	//ILCode := ?#%&(#&%*(@#&()@#$&*; //Not described;
	//ArgumentList := (ArgumentWithComma Argument)
	//==========================================================================

	//Methods used for Top-down Parsing;
	inline void Program();
	inline ValueType Type();
	inline void FunctionName();
	inline void Function();
	inline void Attribute();
	inline int Identifier();
	inline void ArgumentList();
	inline void Argument();
	inline void ILEmit();
	inline int ILCallArgumentList();
	inline void ILCallArgument();
	//==============================================
private:
	Line _curLine;
	Lexer* _lexer;
	FileList& _listFile;
	static FILE* _outExe;
	List<Instr> _instrs;
	FileHeader _fileHeader;
	MetaDataDesc  _metaData;
	StringPool _strPool;
	MethodDesc _curMethod;
	FieldDesc _curField;
	Token _tok;
	int _cerrs;
	int _maxError;
	List<Error> _errList;
	FILE* _dumpFile;
};


#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -