diff --git a/nemu/src/monitor/sdb/addrexp.l b/nemu/src/monitor/sdb/addrexp.l index da00e36..8c01bee 100644 --- a/nemu/src/monitor/sdb/addrexp.l +++ b/nemu/src/monitor/sdb/addrexp.l @@ -1,11 +1,13 @@ %{ + #include #include + static bool success = false; %} %option noyywrap %% -$[a-zA-Z] { } +$?[a-zA-Z]{2,3} { yylval = isa_reg_str2val(yytext, &success); if(!success) { return YYerror; } } 0[xX][0-9a-fA-F]+ { yylval = strtoul(yytext, NULL, 16); return HEX_NUMBER; } [0-9]+ { yylval = strtoul(yytext, NULL, 10); return NUMBER; } [+\-*/()] { return *yytext; } diff --git a/nemu/src/monitor/sdb/addrexp.y b/nemu/src/monitor/sdb/addrexp.y index 1d72129..730c497 100644 --- a/nemu/src/monitor/sdb/addrexp.y +++ b/nemu/src/monitor/sdb/addrexp.y @@ -28,6 +28,7 @@ input expression : number { $$ = $1; } + | register { $$ = $1; } | expression '+' expression { $$ = $1 + $3; } | expression '-' expression { $$ = $1 - $3; } | expression '*' expression { $$ = $1 * $3; } @@ -45,4 +46,7 @@ number : NUMBER | HEX_NUMBER +register + : REGISTER + %% diff --git a/nemu/src/monitor/sdb/sdb.h b/nemu/src/monitor/sdb/sdb.h index c6fa9a2..b1c87de 100644 --- a/nemu/src/monitor/sdb/sdb.h +++ b/nemu/src/monitor/sdb/sdb.h @@ -18,6 +18,7 @@ #include +// TODO: Cache expression evalutation result in ExprResult enum ExprType { EXPR_TYPE_MEM_ADDR, EXPR_TYPE_REG diff --git a/nemu/tests/expr_test.c b/nemu/tests/expr_test.c index 87c1882..1bef171 100644 --- a/nemu/tests/expr_test.c +++ b/nemu/tests/expr_test.c @@ -1,5 +1,5 @@ #include "sys/types.h" -#include "unistd.h" +#include #include #include #include