oscar64/oscar64/Parser.h

71 lines
2.1 KiB
C++

#pragma once
#include "Scanner.h"
#include "Declaration.h"
#include "CompilationUnits.h"
class Parser
{
public:
Parser(Errors * errors, Scanner* scanner, CompilationUnits * compilationUnits);
~Parser(void);
DeclarationScope * mGlobals, * mScope;
int mLocalIndex;
CompilationUnits * mCompilationUnits;
LinkerSection * mCodeSection, * mDataSection, * mBSSection;
void Parse(void);
protected:
bool ConsumeToken(Token token);
bool ConsumeTokenIf(Token token);
void ParsePragma(void);
Declaration* ParseBaseTypeDeclaration(uint32 flags);
Declaration* ParseDeclaration(bool variable);
Declaration* ParseStructDeclaration(uint32 flags, DecType dt);
Declaration* CopyConstantInitializer(int offset, Declaration* dtype, Expression* exp);
Expression* ParseInitExpression(Declaration* dtype);
Expression* ParseDeclarationExpression(void);
Declaration* ParsePostfixDeclaration(void);
Declaration* ReverseDeclaration(Declaration* odec, Declaration* bdec);
Expression* ParseFunction(Declaration* dec);
Expression* ParseAssembler(void);
Expression* ParseAssemblerBaseOperand(void);
Expression* ParseAssemblerMulOperand(void);
Expression* ParseAssemblerAddOperand(void);
Expression* ParseAssemblerOperand(void);
Expression* ParseStatement(void);
Expression* ParseSwitchStatement(void);
Expression* ParseSimpleExpression(void);
Expression* ParsePrefixExpression(void);
Expression* ParsePostfixExpression(void);
Expression* ParseMulExpression(void);
Expression* ParseAddExpression(void);
Expression* ParseShiftExpression(void);
Expression* ParseRelationalExpression(void);
Expression* ParseBinaryAndExpression(void);
Expression* ParseBinaryXorExpression(void);
Expression* ParseBinaryOrExpression(void);
Expression* ParseLogicAndExpression(void);
Expression* ParseLogicOrExpression(void);
Expression* ParseConditionalExpression(void);
Expression* ParseAssignmentExpression(void);
Expression* ParseExpression(void);
Expression* ParseRExpression(void);
Expression* ParseListExpression(void);
Expression* ParseParenthesisExpression(void);
Errors* mErrors;
Scanner* mScanner;
};