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:
2022-09-15 21:29:27 +00:00
parent 6d17dffcdf
commit 2ae60a607c
8 changed files with 238 additions and 210 deletions
+40 -36
View File
@@ -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