Backup, new approach to ast
This commit is contained in:
52
main.c
52
main.c
@@ -81,7 +81,7 @@ parser_test(){
|
||||
|
||||
String exprs[] = {
|
||||
lit("(4+2*53)"),
|
||||
lit("((4+2)*53"),
|
||||
lit("((4+2)*53)"),
|
||||
lit("++5"),
|
||||
lit("5--"), // @Todo(Krzosa):
|
||||
lit("-5"),
|
||||
@@ -95,18 +95,10 @@ parser_test(){
|
||||
parser_lex_stream(&p, exprs[i], lit("File"));
|
||||
Expr *expr = parse_expr(&p);
|
||||
assert(expr);
|
||||
expr_print(expr);
|
||||
lex_print("\n");
|
||||
//expr_print(expr);
|
||||
//lex_print("\n");
|
||||
}
|
||||
|
||||
/*
|
||||
String decls =
|
||||
lit("@Test(a=\"thing\") @str=\"based\" Thing:enum{ Thing_1 = 1<<10, Thing_2 = 10 }"
|
||||
"TTT:struct{ thing:U64; nested:struct{ thing:S64; }}"
|
||||
""
|
||||
);
|
||||
*/
|
||||
|
||||
String decls = os_read_file(lit("ast.h"));
|
||||
parser_lex_stream(&p, decls, lit("File"));
|
||||
AST_Node *node = parse(&p);
|
||||
@@ -114,6 +106,32 @@ parser_test(){
|
||||
assert(node->last_child);
|
||||
ast_print(node);
|
||||
|
||||
for(AST_Node *n = node->first_child; n; n=n->next){
|
||||
if(n->kind == AK_Enum){
|
||||
AST_Node *prefix = ast_find_note(n, lit("prefix"));
|
||||
lex_print("global String %s_metadata[] = {\n", n->name.s.str);
|
||||
for(AST_Node *member = n->first_child; member; member=member->next){
|
||||
lex_print("[");
|
||||
if(prefix) expr_print(prefix->expr);
|
||||
lex_print("%s] = ", member->name.s.str);
|
||||
AST_Node *str = ast_find_note(member, lit("str"));
|
||||
lex_print("lit(\"");
|
||||
if(str){
|
||||
expr_print(str->expr);
|
||||
}
|
||||
else {
|
||||
lex_print("%s", member->name.s.str);
|
||||
}
|
||||
lex_print("\")");
|
||||
lex_print(",\n");
|
||||
}
|
||||
lex_print("};\n");
|
||||
|
||||
}
|
||||
else if(n->kind == AK_Struct){
|
||||
gen_struct(n, (Intern_String){});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function S32
|
||||
@@ -123,6 +141,18 @@ os_main(){
|
||||
lex_test();
|
||||
parser_test();
|
||||
|
||||
String_Map maps[] = {
|
||||
{lit("cap"), lit("cap")},
|
||||
{lit("len"), lit("len")},
|
||||
{lit("data"), lit("tokens")},
|
||||
{lit("parent_type"), lit("Tokens")},
|
||||
{lit("parent_type_lower"), lit("tokens")},
|
||||
{lit("var_type_lower"), lit("token")},
|
||||
{lit("var_type"), lit("Token")},
|
||||
{lit("var_name"), lit("tokens")},
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
String keywords[]={
|
||||
lit("S64"),
|
||||
|
||||
Reference in New Issue
Block a user