Incomplete, but I want to make sure the ideas I have here don't get wiped. Sadly this commit won't compile.
This commit is contained in:
+40
-36
@@ -5,50 +5,54 @@
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include "opcodes.h"
|
||||
|
||||
typedef enum {
|
||||
PLUS,
|
||||
MINUS,
|
||||
STAR,
|
||||
SLASH,
|
||||
POWER,
|
||||
LPARAM,
|
||||
RPARAM,
|
||||
LBRACKET,
|
||||
RBracket,
|
||||
COMMA,
|
||||
STRING,
|
||||
IDENTIFIER,
|
||||
LABEL,
|
||||
NUMBER,
|
||||
LineEnd,
|
||||
//Keywords
|
||||
DB, ORG,
|
||||
//Mnemonics
|
||||
COPY, ADD, SUB, JZ, INT, YLD, RET,
|
||||
CMP, NOP, JMP, CALL, IN, OUT,
|
||||
//Registers
|
||||
R1, R2, R3, R4, R5, R6, R7, R8
|
||||
} TokenType;
|
||||
Plus = '+',
|
||||
Minus = '-',
|
||||
Star = '*',
|
||||
Slash = '/',
|
||||
Power = '^',
|
||||
LParan = '(',
|
||||
RParan = ')',
|
||||
LBracket = '[',
|
||||
RBracket = ']',
|
||||
Comma = ',',
|
||||
NewLine = '\n'
|
||||
} TokenPunctuation;
|
||||
|
||||
typedef enum {
|
||||
None = 0,
|
||||
Reg = 1,
|
||||
Constant = 2,
|
||||
Address = 4,
|
||||
Mnemonic = 8,
|
||||
Directive = 16
|
||||
DB,
|
||||
Origin
|
||||
} Directive;
|
||||
|
||||
typedef enum {
|
||||
RegisterClass = 0,
|
||||
NumberClass = 1,
|
||||
CharacterClass = 2,
|
||||
MnemonicClass = 4,
|
||||
DirectiveClass = 8,
|
||||
PunctuationClass = 16,
|
||||
IdentifierClass = 32,
|
||||
LabelClass = 64,
|
||||
AddressClass = LabelClass | IdentifierClass
|
||||
} TokenClass;
|
||||
|
||||
typedef struct {
|
||||
TokenType type;
|
||||
char* lexeme;
|
||||
void* value;
|
||||
int line;
|
||||
TokenClass token_class;
|
||||
char* Lemexe;
|
||||
TokenClass Class;
|
||||
int LineNumber;
|
||||
|
||||
union {
|
||||
TokenPunctuation Punctuation;
|
||||
Registers Register;
|
||||
Mnemonic Mnemonic;
|
||||
Directive Directive;
|
||||
int Number;
|
||||
} Value;
|
||||
} Token;
|
||||
|
||||
Token* CreateToken(char*, void*, int, TokenType);
|
||||
void FreeToken(Token*);
|
||||
Token* CreateToken(int lineNumber, TokenClass tokenClass);
|
||||
void FreeToken(Token* token);
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user