diff --git a/misc/test.asm b/misc/test.asm index 64892e5..295609f 100644 --- a/misc/test.asm +++ b/misc/test.asm @@ -5,4 +5,6 @@ .db null_byte 0 ;load r2, label -load byte r1, r3 \ No newline at end of file +load byte r1, r3 +load r1, r3 +load r1, 5 \ No newline at end of file diff --git a/src/parser.c b/src/parser.c index 3409585..575e5f4 100644 --- a/src/parser.c +++ b/src/parser.c @@ -35,6 +35,7 @@ IRState* ParseTokens(List* tokens) { while(!ParserAtEnd()) { Token* t = PeekToken(); if (!t || t->EndOfFile) break; + int last = CurrentToken; Symbol* tmp; switch(t->Class) { @@ -63,6 +64,11 @@ IRState* ParseTokens(List* tokens) { //IgnoreParserLine(); break; } + + // if (last == CurrentToken) { + // printf("Failed %d\n", CurrentToken); + // exit(90); + // } } PrintSymbols(); @@ -163,7 +169,7 @@ void HandleAssemblerDirective() { AdvanceParser(); //Save the comma - if (PeekToken()->Class != IdentifierClass && PeekToken()->Class != NumberClass){ + if (PeekToken()->Class != IdentifierClass && PeekToken()->Class != NumberClass && PeekToken()->Class != RegisterClass){ exit(2); } @@ -173,6 +179,11 @@ void HandleAssemblerDirective() { directive->Value.Mnemonic = LODWI; directive->Lemexe = "LODWI"; } + else if (PeekToken()->Class == RegisterClass) { + directive->Class = MnemonicClass; + directive->Value.Mnemonic = LODW; + directive->Lemexe = "LODW"; + } else { printf("LAA\n"); directive->Class = MnemonicClass; @@ -180,7 +191,7 @@ void HandleAssemblerDirective() { directive->Lemexe = "LAA"; } - AdvanceParser(); + AdvanceParser(); //Number or identifier } else if (reg->Class == DirectiveClass) { if (reg->Value.Directive != Byte) { @@ -212,6 +223,8 @@ void HandleAssemblerDirective() { directive->Value.Mnemonic = LODB; directive->Lemexe = "LODB"; } + + AdvanceParser(); //Line end } break;