X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=assembler%2Fscanner.l;h=80b204f6df33d3af0398838217c51e8fc29b9e19;hb=24bd77160095f5cebc08260bdb58eadd1dac3e4f;hp=34559c67c15e56cb6d60035369747b969b59c79f;hpb=b9e19faa25ad9e1b24f08dc77267760df1b98504;p=b43-tools.git diff --git a/assembler/scanner.l b/assembler/scanner.l index 34559c6..80b204f 100644 --- a/assembler/scanner.l +++ b/assembler/scanner.l @@ -48,25 +48,30 @@ NEWLINE ((\r)|(\n)|(\r\n)) {WS}+ { update_lineinfo(); /* whitespace */ } {NEWLINE} { cur_lineinfo.lineno++; update_lineinfo(); } -;.*$ { update_lineinfo(); /* comment */ } ^{WS}*"%"{WS}*arch { update_lineinfo(); return ASM_ARCH; } ^{WS}*"%"{WS}*start { update_lineinfo(); return ASM_START; } +"%"{WS}*assert { update_lineinfo(); return ASM_ASSERT; } -^{WS}*\.text{WS}*$ { update_lineinfo(); return SECTION_TEXT; } -^{WS}*\.initvals/\({IDENTIFIER}\){WS}*{NEWLINE} { update_lineinfo(); return SECTION_IVALS; } +^{WS}*\.text{WS}*$ { update_lineinfo(); return SECTION_TEXT; } +^{WS}*\.initvals/\({IDENTIFIER}\) { update_lineinfo(); return SECTION_IVALS; } -spr[0-9a-fA-F]{3,3} { update_lineinfo(); return SPR; } +spr[0-9a-fA-F]{1,4} { update_lineinfo(); return SPR; } r/([0-9]|([1-5][0-9])|(6[0-3])) { update_lineinfo(); return GPR; } off/[0-6] { update_lineinfo(); return OFFR; } lr/[0-3] { update_lineinfo(); return LR; } , { update_lineinfo(); return COMMA; } +; { update_lineinfo(); return SEMICOLON; } \[ { update_lineinfo(); return BRACK_OPEN; } \] { update_lineinfo(); return BRACK_CLOSE; } \( { update_lineinfo(); return PAREN_OPEN; } \) { update_lineinfo(); return PAREN_CLOSE; } +== { update_lineinfo(); return EQUAL; } +!= { update_lineinfo(); return NOT_EQUAL; } +\|\| { update_lineinfo(); return LOGICAL_OR; } +\&\& { update_lineinfo(); return LOGICAL_AND; } \+ { update_lineinfo(); return PLUS; } \- { update_lineinfo(); return MINUS; } \* { update_lineinfo(); return MULTIPLY; } @@ -137,21 +142,20 @@ phy { update_lineinfo(); return IVAL_PHY; } radio { update_lineinfo(); return IVAL_RADIO; } shm16 { update_lineinfo(); return IVAL_SHM16; } shm32 { update_lineinfo(); return IVAL_SHM32; } +tram { update_lineinfo(); return IVAL_TRAM; } -@[0-9a-fA-F]{3,3} { update_lineinfo(); return RAW_CODE; } +@[0-9a-fA-F]{1,4} { update_lineinfo(); return RAW_CODE; } 0x[0-9a-fA-F]+ { update_lineinfo(); return HEXNUM; } -?[0-9]+ { update_lineinfo(); return DECNUM; } -bcm43xx_newworld { update_lineinfo(); return ARCH_NEWWORLD; } -bcm43xx_oldworld { update_lineinfo(); return ARCH_OLDWORLD; } - {IDENTIFIER}: { update_lineinfo(); return LABEL; } {IDENTIFIER} { update_lineinfo(); return IDENT; } %% struct lineinfo cur_lineinfo; +//FIXME The linenumber sometimes is wrong. static void interpret_cppinfo(const char *str) { @@ -178,7 +182,7 @@ static void interpret_cppinfo(const char *str) memset(tmp, 0, sizeof(tmp)); memcpy(tmp, str, min(sizeof(tmp) - 1, (int)(found - str))); - cur_lineinfo.lineno = strtoul(tmp, NULL, 10); + cur_lineinfo.lineno = strtoul(tmp, NULL, 10) - 1; str = found; str++; @@ -196,9 +200,6 @@ static void interpret_cppinfo(const char *str) min(sizeof(cur_lineinfo.file) - 1, (int)(found - str))); - if (strcmp(cur_lineinfo.file, "") == 0) - strcpy(cur_lineinfo.file, "Input File"); - return; error: fprintf(stderr, "Invalid CPP line directive: %s\n", orig);