From e46d936c38ea5bd202a801033e4f4270429436b9 Mon Sep 17 00:00:00 2001 From: Krzosa Karol Date: Thu, 29 Sep 2022 19:17:53 +0200 Subject: [PATCH] Meta generated data working --- core_compiler.cpp | 8 ++-- core_compiler.h | 94 +++++++++++++++++++++---------------------- core_globals.cpp | 34 ++++++++++------ core_typechecking.cpp | 12 +++--- meta.py | 56 +++++++++++++------------- meta_run.py | 2 +- 6 files changed, 108 insertions(+), 98 deletions(-) diff --git a/core_compiler.cpp b/core_compiler.cpp index f417490..49438a4 100644 --- a/core_compiler.cpp +++ b/core_compiler.cpp @@ -41,8 +41,8 @@ for i in meta.token_simple_expr: first = "op_" + meta.pascal_to_snake(meta.token_simple_expr[0][0]) last = "op_" + meta.pascal_to_snake(meta.token_simple_expr[-1][0]) -print(f"l->first_op = {first}") -print(f"l->last_op = {last}") +print(f"l->first_op = {first};") +print(f"l->last_op = {last};") */ op_mul = l->intern("*"_s); op_div = l->intern("/"_s); @@ -68,8 +68,8 @@ op_decrement = l->intern("--"_s); op_increment = l->intern("++"_s); op_post_decrement = l->intern("--"_s); op_post_increment = l->intern("++"_s); -l->first_op = op_mul -l->last_op = op_post_increment +l->first_op = op_mul; +l->last_op = op_post_increment; /*END*/ } diff --git a/core_compiler.h b/core_compiler.h index c362f55..4a4ebf5 100644 --- a/core_compiler.h +++ b/core_compiler.h @@ -14,54 +14,54 @@ enum Token_Kind{ /*# import meta for i in meta.token_kinds: - print(" " + i[0] + ",") + print(" TK_" + i[0] + ",") */ - Mul, - Div, - Mod, - LeftShift, - RightShift, - FirstMul = TK_Mul, - LastMul = TK_RightShift, - Add, - Sub, - FirstAdd = TK_Add, - LastAdd = TK_Sub, - Equals, - LesserThenOrEqual, - GreaterThenOrEqual, - LesserThen, - GreaterThen, - NotEquals, - FirstCompare = TK_Equals, - LastCompare = TK_NotEquals, - BitAnd, - BitOr, - BitXor, - And, - Or, - FirstLogical = TK_BitAnd, - LastLogical = TK_Or, - Neg, - Not, - Decrement, - Increment, - PostDecrement, - PostIncrement, - Assign, - ColonAssign, - DivAssign, - MulAssign, - ModAssign, - SubAssign, - AddAssign, - AndAssign, - OrAssign, - XorAssign, - LeftShiftAssign, - RightShiftAssign, - FirstAssign = TK_Assign, - LastAssign = TK_RightShiftAssign, + TK_Mul, + TK_Div, + TK_Mod, + TK_LeftShift, + TK_RightShift, + TK_FirstMul = TK_Mul, + TK_LastMul = TK_RightShift, + TK_Add, + TK_Sub, + TK_FirstAdd = TK_Add, + TK_LastAdd = TK_Sub, + TK_Equals, + TK_LesserThenOrEqual, + TK_GreaterThenOrEqual, + TK_LesserThen, + TK_GreaterThen, + TK_NotEquals, + TK_FirstCompare = TK_Equals, + TK_LastCompare = TK_NotEquals, + TK_BitAnd, + TK_BitOr, + TK_BitXor, + TK_And, + TK_Or, + TK_FirstLogical = TK_BitAnd, + TK_LastLogical = TK_Or, + TK_Neg, + TK_Not, + TK_Decrement, + TK_Increment, + TK_PostDecrement, + TK_PostIncrement, + TK_Assign, + TK_ColonAssign, + TK_DivAssign, + TK_MulAssign, + TK_ModAssign, + TK_SubAssign, + TK_AddAssign, + TK_AndAssign, + TK_OrAssign, + TK_XorAssign, + TK_LeftShiftAssign, + TK_RightShiftAssign, + TK_FirstAssign = TK_Assign, + TK_LastAssign = TK_RightShiftAssign, TK_OpenParen, TK_CloseParen, TK_OpenBrace, diff --git a/core_globals.cpp b/core_globals.cpp index f439a46..518addc 100644 --- a/core_globals.cpp +++ b/core_globals.cpp @@ -35,28 +35,38 @@ Intern_String intern_it; Intern_String intern_strict; Intern_String intern_flag; -Intern_String op_add; // first +/*# +import meta + +for i in meta.token_simple_expr: + if i[1] != "SPECIAL": + print("Intern_String op_" + meta.pascal_to_snake(i[0]) + ";") +*/ Intern_String op_mul; Intern_String op_div; +Intern_String op_mod; +Intern_String op_left_shift; +Intern_String op_right_shift; +Intern_String op_add; Intern_String op_sub; -Intern_String op_and; -Intern_String op_bitand; -Intern_String op_or; -Intern_String op_bitor; -Intern_String op_xor; Intern_String op_equals; -Intern_String op_not_equals; Intern_String op_lesser_then_or_equal; Intern_String op_greater_then_or_equal; Intern_String op_lesser_then; Intern_String op_greater_then; -Intern_String op_left_shift; -Intern_String op_right_shift; - -Intern_String op_not; +Intern_String op_not_equals; +Intern_String op_bit_and; +Intern_String op_bit_or; +Intern_String op_bit_xor; +Intern_String op_and; +Intern_String op_or; Intern_String op_neg; +Intern_String op_not; Intern_String op_decrement; -Intern_String op_increment; // last +Intern_String op_increment; +Intern_String op_post_decrement; +Intern_String op_post_increment; +/*END*/ //----------------------------------------------------------------------------- // Type globals diff --git a/core_typechecking.cpp b/core_typechecking.cpp index 17fc196..855e394 100644 --- a/core_typechecking.cpp +++ b/core_typechecking.cpp @@ -863,10 +863,10 @@ map_operator_to_intern(Token_Kind op){ case TK_Div: return op_div; break; case TK_Sub: return op_sub; break; case TK_And: return op_and; break; - case TK_BitAnd: return op_bitand; break; + case TK_BitAnd: return op_bit_and; break; case TK_Or: return op_or; break; - case TK_BitOr: return op_bitor; break; - case TK_BitXor: return op_xor; break; + case TK_BitOr: return op_bit_or; break; + case TK_BitXor: return op_bit_xor; break; case TK_Equals: return op_equals; break; case TK_NotEquals: return op_not_equals; break; case TK_LesserThenOrEqual: return op_lesser_then_or_equal; break; @@ -890,10 +890,10 @@ map_operator_intern_to_identifier_name(Intern_String op){ if(op.str == op_div.str) return "DIV"_s; if(op.str == op_sub.str) return "SUB"_s; if(op.str == op_and.str) return "AND"_s; - if(op.str == op_bitand.str) return "BITAND"_s; + if(op.str == op_bit_and.str) return "BITAND"_s; if(op.str == op_or.str) return "OR"_s; - if(op.str == op_bitor.str) return "BITOR"_s; - if(op.str == op_xor.str) return "XOR"_s; + if(op.str == op_bit_or.str) return "BITOR"_s; + if(op.str == op_bit_xor.str) return "XOR"_s; if(op.str == op_equals.str) return "EQUALS"_s; if(op.str == op_not_equals.str) return "NOT_EQUALS"_s; if(op.str == op_lesser_then_or_equal.str) return "LESSER_THEN_OR_EQUAL"_s; diff --git a/meta.py b/meta.py index ec57458..4fd8cdd 100644 --- a/meta.py +++ b/meta.py @@ -59,34 +59,34 @@ token_assign_expr = [ ] token_rest = [ - ["TK_OpenParen", "("], - ["TK_CloseParen", ")"], - ["TK_OpenBrace", "{"], - ["TK_CloseBrace", "}"], - ["TK_OpenBracket", "["], - ["TK_CloseBracket", "]"], - ["TK_Comma", ","], - ["TK_Pound", "#"], - ["TK_Question", "?"], - ["TK_ThreeDots", "..."], - ["TK_Semicolon", ";"], - ["TK_Dot", "."], - ["TK_TwoDots", ".."], - ["TK_NewLine", "[NewLine]"], - ["TK_Colon", ":"], - ["TK_DoubleColon", "::"], - ["TK_At", "@"], - ["TK_Arrow", "->"], - ["TK_ExprSizeof", "[SizeOf]"], - ["TK_DocComment", "[///]"], - ["TK_Comment", "//"], - ["TK_Identifier", "[Ident]"], - ["TK_UnicodeLit", "[Unicode]"], - ["TK_StringLit", "[String]"], - ["TK_Error", "[Error]"], - ["TK_Float", "[Float]"], - ["TK_Integer", "[Int]"], - ["TK_Keyword", "[Keyword]"], + ["OpenParen", "("], + ["CloseParen", ")"], + ["OpenBrace", "{"], + ["CloseBrace", "}"], + ["OpenBracket", "["], + ["CloseBracket", "]"], + ["Comma", ","], + ["Pound", "#"], + ["Question", "?"], + ["ThreeDots", "..."], + ["Semicolon", ";"], + ["Dot", "."], + ["TwoDots", ".."], + ["NewLine", "[NewLine]"], + ["Colon", ":"], + ["DoubleColon", "::"], + ["At", "@"], + ["Arrow", "->"], + ["ExprSizeof", "[SizeOf]"], + ["DocComment", "[///]"], + ["Comment", "//"], + ["Identifier", "[Ident]"], + ["UnicodeLit", "[Unicode]"], + ["StringLit", "[String]"], + ["Error", "[Error]"], + ["Float", "[Float]"], + ["Integer", "[Int]"], + ["Keyword", "[Keyword]"], ] token_kinds = token_simple_expr + token_assign_expr + token_rest \ No newline at end of file diff --git a/meta_run.py b/meta_run.py index ee7358c..9ef04c8 100644 --- a/meta_run.py +++ b/meta_run.py @@ -3,7 +3,7 @@ import sys import os -files = ["core_compiler.cpp", "core_compiler.h"] +files = ["core_compiler.cpp", "core_compiler.h", "core_globals.cpp"] for file_to_modify in files: fd = open(file_to_modify, "r+")