From a718c5c723c98190f7f247dc2495af26fa65e402 Mon Sep 17 00:00:00 2001 From: tracer-ysyx Date: Mon, 15 Jan 2024 17:03:16 +0800 Subject: [PATCH] =?UTF-8?q?>=20compile=20NEMU=20ysyx=5F22040000=20?= =?UTF-8?q?=E6=9D=8E=E5=BF=83=E6=9D=A8=20Linux=20calcite=206.1.71=20#1-Nix?= =?UTF-8?q?OS=20SMP=20PREEMPT=5FDYNAMIC=20Fri=20Jan=20=205=2014:18:41=20UT?= =?UTF-8?q?C=202024=20x86=5F64=20GNU/Linux=20=2017:03:16=20=20up=202=20day?= =?UTF-8?q?s=20=205:58,=20=202=20users,=20=20load=20average:=200.87,=200.6?= =?UTF-8?q?9,=200.71?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- nemu/src/monitor/sdb/addrexp.l | 4 +++- nemu/src/monitor/sdb/addrexp.y | 4 ++++ nemu/src/monitor/sdb/sdb.h | 1 + nemu/tests/expr_test.c | 2 +- 4 files changed, 9 insertions(+), 2 deletions(-) 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