> compile NEMU

ysyx_22040000 李心杨
Linux calcite 6.1.69 #1-NixOS SMP PREEMPT_DYNAMIC Wed Dec 20 16:00:29 UTC 2023 x86_64 GNU/Linux
 15:19:17  up  15:35,  2 users,  load average: 0.35, 0.60, 0.60
This commit is contained in:
tracer-ysyx 2024-01-12 15:19:17 +08:00 committed by xinyangli
parent 146ba011af
commit 86c55d7b06
4 changed files with 3182 additions and 12 deletions

1387
nemu/calculator.c Normal file

File diff suppressed because it is too large Load diff

1769
nemu/lex.yy.c Normal file

File diff suppressed because it is too large Load diff

View file

@ -40,6 +40,16 @@ $(OBJ_DIR)/%.o: %.cc
@$(CXX) $(CFLAGS) $(CXXFLAGS) -c -o $@ $<
$(call call_fixdep, $(@:.o=.d), $@)
$(OBJ_DIR)/%-lex.l: %-exp.y
@echo + YACC $<
@mkdir -p $(dir $@)
@$(YACC) $(YFLAGS) -H $(<:.y=.h) -o $@ $<
$(OBJ_DIR)/%.c: %-lex.l
@echo + LEX $<
@mkdir -p $(dir $@)
@$(LEX) $(LFLAGS) -o $@ $<
# Depencies
-include $(OBJS:.o=.d)

View file

@ -21,24 +21,18 @@
#include <regex.h>
enum {
TK_NOTYPE = 256, TK_EQ,
/* TODO: Add more token types */
TK_NOTYPE = 256, TK_EQ, TK_NUMBER,
LEX_GROUP_OPERATOR, LEX_GROUP_DIGIT
};
static struct rule {
const char *regex;
int token_type;
} rules[] = {
/* TODO: Add more rules.
* Pay attention to the precedence level of different rules.
*/
{" +", TK_NOTYPE}, // spaces
{"\\+", '+'}, // plus
{"==", TK_EQ}, // equal
{"[ \t]+", TK_NOTYPE},
{"==", TK_EQ},
{"[0-9]+", LEX_GROUP_DIGIT},
{"[\\+-*/()", LEX_GROUP_OPERATOR},
};
#define NR_REGEX ARRLEN(rules)
@ -95,6 +89,16 @@ static bool make_token(char *e) {
*/
switch (rules[i].token_type) {
case LEX_GROUP_OPERATOR:
tokens[nr_token].type = *substr_start;
tokens[nr_token].str[0] = '\0';
nr_token++;
break;
case LEX_GROUP_DIGIT:
tokens[nr_token].type = TK_NUMBER;
nr_token++;
break;
case TK_NOTYPE: break;
default: TODO();
}