> 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:
parent
146ba011af
commit
86c55d7b06
4 changed files with 3182 additions and 12 deletions
1387
nemu/calculator.c
Normal file
1387
nemu/calculator.c
Normal file
File diff suppressed because it is too large
Load diff
1769
nemu/lex.yy.c
Normal file
1769
nemu/lex.yy.c
Normal file
File diff suppressed because it is too large
Load diff
|
@ -40,6 +40,16 @@ $(OBJ_DIR)/%.o: %.cc
|
||||||
@$(CXX) $(CFLAGS) $(CXXFLAGS) -c -o $@ $<
|
@$(CXX) $(CFLAGS) $(CXXFLAGS) -c -o $@ $<
|
||||||
$(call call_fixdep, $(@:.o=.d), $@)
|
$(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
|
# Depencies
|
||||||
-include $(OBJS:.o=.d)
|
-include $(OBJS:.o=.d)
|
||||||
|
|
||||||
|
|
|
@ -21,24 +21,18 @@
|
||||||
#include <regex.h>
|
#include <regex.h>
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
TK_NOTYPE = 256, TK_EQ,
|
TK_NOTYPE = 256, TK_EQ, TK_NUMBER,
|
||||||
|
LEX_GROUP_OPERATOR, LEX_GROUP_DIGIT
|
||||||
/* TODO: Add more token types */
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct rule {
|
static struct rule {
|
||||||
const char *regex;
|
const char *regex;
|
||||||
int token_type;
|
int token_type;
|
||||||
} rules[] = {
|
} rules[] = {
|
||||||
|
{"[ \t]+", TK_NOTYPE},
|
||||||
/* TODO: Add more rules.
|
{"==", TK_EQ},
|
||||||
* Pay attention to the precedence level of different rules.
|
{"[0-9]+", LEX_GROUP_DIGIT},
|
||||||
*/
|
{"[\\+-*/()", LEX_GROUP_OPERATOR},
|
||||||
|
|
||||||
{" +", TK_NOTYPE}, // spaces
|
|
||||||
{"\\+", '+'}, // plus
|
|
||||||
{"==", TK_EQ}, // equal
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#define NR_REGEX ARRLEN(rules)
|
#define NR_REGEX ARRLEN(rules)
|
||||||
|
@ -95,6 +89,16 @@ static bool make_token(char *e) {
|
||||||
*/
|
*/
|
||||||
|
|
||||||
switch (rules[i].token_type) {
|
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();
|
default: TODO();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue