RVBTCC/demo/lut.c
2024-11-28 22:50:12 +08:00

47 lines
1.0 KiB
C

int printf(const char format[], ...);
int getchar();
char string_table[65536];
int string_offset;
int string_lut[4096];
int string_lut_size;
int parse_string() {
int offset = string_offset;
int ch;
while ((ch = getchar()) != '"') {
if (ch == -1 || ch == '\n') {
printf("expecting '\"'\n");
return 1;
}
string_table[string_offset++] = ch;
}
string_table[string_offset++] = 0;
string_lut[string_lut_size] = offset;
return string_lut_size++;
}
int streq(const char* s1, const char* s2) {
while (*s1 && *s2 && *s1 == *s2) {
s1++;
s2++;
}
return *s1 == *s2;
}
void dump_string_table() {
printf(".data\n");
for (int i = 0; i < string_lut_size; ++i) {
char* id = string_table + string_lut[i];
printf(".LC%d: .string \"%s\", const: %d\n",
i, id, streq(id, "const"));
}
}
int main() {
char ch;
while ((ch = getchar()) == '"') parse_string();
dump_string_table();
return 0;
}