summaryrefslogtreecommitdiff
path: root/src/lexer.l
diff options
context:
space:
mode:
authorJacob McDonnell <jacob@jacobmcdonnell.com>2026-04-21 19:56:41 -0400
committerJacob McDonnell <jacob@jacobmcdonnell.com>2026-04-21 19:56:41 -0400
commitef375d2a484fd0c3dced72174f0dc39694de433a (patch)
treedc322fafc9447ebf0d10f91ee62807d3beb5f8e1 /src/lexer.l
parent2999bd3b9466617938f2f7ceb689cfbe33b46cd9 (diff)
feat: Encoded Assembly InstructionsHEADmain
Initial Encoding of assembly instructions in C++ structs.
Diffstat (limited to 'src/lexer.l')
-rw-r--r--src/lexer.l147
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; }