diff options
| author | Jacob McDonnell <jacob@jacobmcdonnell.com> | 2026-04-21 19:56:41 -0400 |
|---|---|---|
| committer | Jacob McDonnell <jacob@jacobmcdonnell.com> | 2026-04-21 19:56:41 -0400 |
| commit | ef375d2a484fd0c3dced72174f0dc39694de433a (patch) | |
| tree | dc322fafc9447ebf0d10f91ee62807d3beb5f8e1 /src/lexer.l | |
| parent | 2999bd3b9466617938f2f7ceb689cfbe33b46cd9 (diff) | |
Initial Encoding of assembly instructions in C++ structs.
Diffstat (limited to 'src/lexer.l')
| -rw-r--r-- | src/lexer.l | 147 |
1 files changed, 45 insertions, 102 deletions
diff --git a/src/lexer.l b/src/lexer.l index 6daaf6b..7a24b90 100644 --- a/src/lexer.l +++ b/src/lexer.l @@ -23,128 +23,71 @@ extern size_t line_number; \n { ++line_number; return T_ENDL; } 0x[0-9A-Fa-f]+ { yylval.i_val = atoi(yytext); return T_INTEGER; } -*[0-9]+ { yylval.i_val = atoi(yytext); return T_INTEGER; } +lui { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } +auipc { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } +jal { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } +jalr { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } +beq { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } +bne { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } +blt { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } +bge { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } +bltu { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } +bgeu { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } lb { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } lh { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } lw { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -ld { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } lbu { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } lhu { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -lwu { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } sb { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } sh { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } sw { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -sd { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -li { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -lui { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -auipc { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -mv { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -sext.b { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -sext.h { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -sext.w { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -zext.b { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -zext.h { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -zext.w { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -rev8 { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -czero.eqz { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -czero.nez { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } addi { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } +slti { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } +sltiu { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } +xori { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } +ori { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } +andi { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } +slli { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } +srli { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } +srai { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } add { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -sh1add { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -sh2add { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -sh3add { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -add.wu { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -sh1add.wu { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -sh2add.wu { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -sh3add.wu { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } +sub { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } +sll { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } +slt { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } +sltu { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } +xor { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } +srl { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } +sra { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } +or { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } +and { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } +fence { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } +ecall { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } +ebreak { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } addiw { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } +slliw { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } +srliw { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } +sraiw { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } addw { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -sub { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } subw { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -neg { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -negw { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } +sllw { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } +srlw { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } +sraw { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } +ld { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } +lwu { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } +sd { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } mul { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -mulw { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } mulh { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -mulhu { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } mulhsu { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } +mulhu { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } div { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } divu { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } rem { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } remu { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -min { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -max { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -minu { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -maxu { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -seqz { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -snez { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -slti { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -slt { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -sltiu { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -sltu { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -bexti { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -bext { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -andi { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -and { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -andn { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -bclri { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -bclr { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -ori { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -or { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -orn { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -bseti { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -bset { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -xori { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -xor { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -xnor { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -binvi { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -binv { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -not { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -orc.b { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -slli { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -sll { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -slliw { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -sllw { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -slli.wu { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -srli { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -srl { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -srliw { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -srlw { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -srai { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -sra { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -sraiw { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -sraw { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -rori { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -ror { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -rol { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -roriw { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -rorw { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -rolw { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -clz { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -clzw { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -ctz { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -ctzw { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -cpop { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -cpopw { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -j { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -jal { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -jr { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -jalr { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -call { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -tail { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -ret { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -beq { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -bne { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -blt { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -bgt { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -bge { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -ble { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -bltu { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -bgtu { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -bgeu { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -bleu { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -nop { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -ecall { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } -ebreak { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } +mulw { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } +divw { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } +divuw { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } +remw { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } +remuw { yylval.instruction = strdup(yytext); return T_INSTRUCTION; } zero { yylval.reg = strdup(yytext); return T_REGISTER; } ra { yylval.reg = strdup(yytext); return T_REGISTER; } sp { yylval.reg = strdup(yytext); return T_REGISTER; } |
