From aa3888b57889cf3e5f6b208dd030a63578a1819a Mon Sep 17 00:00:00 2001 From: Garritt McCune Date: Tue, 4 Apr 2023 22:14:17 -0500 Subject: [PATCH] Fixed up the RemoveCurrentToken function which was causing all sorts of bugs, and added the ability to delcare a data byte, '.db', to have a variable's address as a value. This will be needed for building up an interrupt table at least with the version I have in mind. --- misc/test.asm | 5 ++++- src/parser.c | 14 +++++++++----- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/misc/test.asm b/misc/test.asm index 74a367d..74985cc 100644 --- a/misc/test.asm +++ b/misc/test.asm @@ -1,4 +1,5 @@ ;.include "./another_test.asm" +.db labelsz reference .db video_start 0xF37F .db msg "Hello, world!", 0 .db NOTERM "No terminating byte here" @@ -9,11 +10,13 @@ something_insance: load r1, unknown_symbol load byte r1, r3 load r1, 5 +.db fun_alright 0x70 load r3, r4 store byte r3, r5 store r5, r7 -cmp r1, r4 +unknown_symbol: cmp r1, 5 +cmp r1, r2 and r1, r2 add r4, r7 inc r1 ;increment r1 diff --git a/src/parser.c b/src/parser.c index 6dc41bc..db45bf8 100644 --- a/src/parser.c +++ b/src/parser.c @@ -67,8 +67,8 @@ IRState* ParseTokens(List* tokens) { } break; default: - //fprintf(stderr, "[Warning] Line %d: Syntax error, expected start of expression, got '%c' [%d].\n", t->LineNumber, t->Value.Punctuation, t->Class); - //exit(1); + fprintf(stderr, "[Warning] Line %d: Syntax error, expected start of expression, got '%c' [%d].\n", t->LineNumber, t->Value.Punctuation, t->Class); + exit(1); //IgnoreParserLine(); break; } @@ -99,6 +99,11 @@ void HandleAssemblerDirective() { ExpectLineEndOrFileEnd(RemoveExpected); } + else if (PeekToken()->Class == IdentifierClass) { + symbol = ExpectIdentifier(0, RemoveExpected); + + ExpectLineEndOrFileEnd(RemoveExpected); + } HeapSize += symbol->Length; } @@ -149,7 +154,7 @@ void HandleAssemblerDirective() { exit(3); } - RemoveCurrentToken(); AdvanceParser(); //byte + RemoveCurrentToken(); //byte ExpectRegister(); @@ -186,7 +191,6 @@ void HandleAssemblerDirective() { } RemoveCurrentToken(); //Remove byte modifier token. - AdvanceParser(); directive->Value.Mnemonic = STOB; directive->Class = MnemonicClass; @@ -473,5 +477,5 @@ void IgnoreParserLine(void) { void RemoveCurrentToken(void) { RemoveItem(CurrentToken, TokensList); - if (CurrentToken > 0) CurrentToken--; + //if (CurrentToken > 0) CurrentToken--; } \ No newline at end of file