From 4d510c01f0aacf45cecf1a2d9853f3d0d08e159f Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Sat, 23 May 2020 15:07:14 -0500 Subject: [PATCH] More parser progress; added notion of 'const' --- onyx | Bin 82384 -> 82952 bytes onyx.c | 23 ++++++++++------ onyxlex.c | 2 ++ onyxlex.h | 1 + onyxmsgs.c | 9 ++++++- onyxmsgs.h | 6 ++++- onyxparser.c | 65 +++++++++++++++++++++++++++++++++++---------- onyxparser.h | 2 ++ progs/minimal.onyx | 11 +++++--- 9 files changed, 91 insertions(+), 28 deletions(-) diff --git a/onyx b/onyx index 7759fcd93b530e775dfbe5c5d3faf33cff8f6c0d..2c67a97770447bdd8cd6786329c985c095e460e5 100755 GIT binary patch literal 82952 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 literal 82384 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, it->pos.filename, it->pos.line, it->pos.column); - // onyx_token_null_toggle(*it); - // } + for (OnyxToken* it = token_arr; !bh_arr_end(token_arr, it); it++) { + onyx_token_null_toggle(*it); + bh_printf("%s (%s:%l:%l)\n", onyx_get_token_type_name(it->type), it->pos.filename, it->pos.line, it->pos.column); + onyx_token_null_toggle(*it); + } +#endif bh_arena msg_arena; bh_arena_init(&msg_arena, alloc, 4096); @@ -47,8 +49,13 @@ int main(int argc, char *argv[]) { OnyxParser parser = onyx_parser_create(ast_alloc, &tokenizer, &msgs); OnyxAstNode* program = onyx_parse(&parser); - onyx_message_print(&msgs); - onyx_ast_print(program); + // NOTE: if there are errors, assume the parse tree was generated wrong, + // even if it may have still been generated correctly. + if (onyx_message_has_errors(&msgs)) { + onyx_message_print(&msgs); + } else { + onyx_ast_print(program); + } bh_file_contents_delete(&fc); onyx_tokenizer_free(&tokenizer); diff --git a/onyxlex.c b/onyxlex.c index ca877d6c..b7bf7a54 100644 --- a/onyxlex.c +++ b/onyxlex.c @@ -15,6 +15,7 @@ static const char* onyx_token_type_names[] = { "for", //"TOKEN_TYPE_KEYWORD_FOR", "do", //"TOKEN_TYPE_KEYWORD_DO", "return", //"TOKEN_TYPE_KEYWORD_RETURN", + "const", //"TOKEN_TYPE_KEYWORD_CONST", "foreign", //"TOKEN_TYPE_KEYWORD_FOREIGN", "proc", //"TOKEN_TYPE_KEYWORD_PROC", "global", //"TOKEN_TYPE_KEYWORD_GLOBAL", @@ -155,6 +156,7 @@ OnyxToken* onyx_get_token(OnyxTokenizer* tokenizer) { LITERAL_TOKEN("foreign", TOKEN_TYPE_KEYWORD_FOREIGN); LITERAL_TOKEN("for", TOKEN_TYPE_KEYWORD_FOR); LITERAL_TOKEN("return", TOKEN_TYPE_KEYWORD_RETURN); + LITERAL_TOKEN("const", TOKEN_TYPE_KEYWORD_CONST); LITERAL_TOKEN("do", TOKEN_TYPE_KEYWORD_DO); LITERAL_TOKEN("proc", TOKEN_TYPE_KEYWORD_PROC); LITERAL_TOKEN("global", TOKEN_TYPE_KEYWORD_GLOBAL); diff --git a/onyxlex.h b/onyxlex.h index 1fbce3a9..a64b0ec6 100644 --- a/onyxlex.h +++ b/onyxlex.h @@ -17,6 +17,7 @@ typedef enum OnyxTokenType { TOKEN_TYPE_KEYWORD_FOR, TOKEN_TYPE_KEYWORD_DO, TOKEN_TYPE_KEYWORD_RETURN, + TOKEN_TYPE_KEYWORD_CONST, TOKEN_TYPE_KEYWORD_FOREIGN, TOKEN_TYPE_KEYWORD_PROC, TOKEN_TYPE_KEYWORD_GLOBAL, diff --git a/onyxmsgs.c b/onyxmsgs.c index 53b35975..fae03d85 100644 --- a/onyxmsgs.c +++ b/onyxmsgs.c @@ -4,7 +4,10 @@ static const char* msg_formats[] = { "expected token '%s', got '%s'", "unexpected token '%s'", - "unknown type '%s'" + "unknown type '%s'", + "expected lval '%s'", + "attempt to assign to constant '%s'", + "unknown symbol '%s'", }; void onyx_message_add(OnyxMessages* msgs, OnyxMessageType type, OnyxFilePos pos, ...) { @@ -38,6 +41,10 @@ void onyx_message_print(OnyxMessages* msgs) { } } +b32 onyx_message_has_errors(OnyxMessages* msgs) { + return msgs->first != NULL; +} + void onyx_message_create(bh_allocator allocator, OnyxMessages* msgs) { msgs->allocator = allocator; msgs->first = NULL; diff --git a/onyxmsgs.h b/onyxmsgs.h index 1a2ae502..81c667b2 100644 --- a/onyxmsgs.h +++ b/onyxmsgs.h @@ -12,10 +12,13 @@ typedef enum OnyxMessageType { ONYX_MESSAGE_TYPE_EXPECTED_TOKEN, ONYX_MESSAGE_TYPE_UNEXPECTED_TOKEN, ONYX_MESSAGE_TYPE_UNKNOWN_TYPE, + ONYX_MESSAGE_TYPE_NOT_LVAL, + ONYX_MESSAGE_TYPE_ASSIGN_CONST, + ONYX_MESSAGE_TYPE_UNKNOWN_SYMBOL, ONYX_MESSAGE_TYPE_COUNT, } OnyxMessageType; - + typedef struct OnyxMessage { OnyxMessageType type; OnyxFilePos pos; @@ -31,6 +34,7 @@ typedef struct OnyxMessages { void onyx_message_add(OnyxMessages* msgs, OnyxMessageType type, OnyxFilePos pos, ...); void onyx_message_print(OnyxMessages* msgs); +b32 onyx_message_has_errors(OnyxMessages* msgs); void onyx_message_create(bh_allocator allocator, OnyxMessages* msgs); #endif diff --git a/onyxparser.c b/onyxparser.c index 475d38fc..020c88d3 100644 --- a/onyxparser.c +++ b/onyxparser.c @@ -72,12 +72,12 @@ static b32 is_terminating_token(OnyxTokenType token_type); static OnyxToken* expect(OnyxParser* parser, OnyxTokenType token_type); static OnyxAstNodeScope* enter_scope(OnyxParser* parser); static OnyxAstNodeScope* leave_scope(OnyxParser* parser); -static void insert_identifier(OnyxParser* parser, OnyxAstNodeLocal* local); +static void insert_local(OnyxParser* parser, OnyxAstNodeLocal* local); static OnyxAstNode* parse_factor(OnyxParser* parser); static OnyxAstNode* parse_bin_op(OnyxParser* parser, OnyxAstNode* left); static OnyxAstNode* parse_expression(OnyxParser* parser); static OnyxAstNode* parse_if_stmt(OnyxParser* parser); -static b32 parse_expression_statement(OnyxParser* parser, OnyxAstNode** ret); +static b32 parse_symbol_statement(OnyxParser* parser, OnyxAstNode** ret); static OnyxAstNode* parse_return_statement(OnyxParser* parser); static OnyxAstNodeBlock* parse_block(OnyxParser* parser, b32 belongs_to_function); static OnyxAstNode* parse_statement(OnyxParser* parser); @@ -112,6 +112,12 @@ static b32 is_terminating_token(OnyxTokenType token_type) { } } +static void find_token(OnyxParser* parser, OnyxTokenType token_type) { + while (parser->curr_token->type != token_type && !is_terminating_token(parser->curr_token->type)) { + parser_next_token(parser); + } +} + // Advances to next token no matter what static OnyxToken* expect(OnyxParser* parser, OnyxTokenType token_type) { OnyxToken* token = parser->curr_token; @@ -168,7 +174,7 @@ static OnyxAstNode* lookup_identifier(OnyxParser* parser, OnyxToken* token) { return ident; } -static void insert_identifier(OnyxParser* parser, OnyxAstNodeLocal* local) { +static void insert_local(OnyxParser* parser, OnyxAstNodeLocal* local) { OnyxAstNodeScope* scope = parser->curr_scope; local->prev_local = scope->last_local; scope->last_local = local; @@ -263,7 +269,7 @@ static OnyxAstNode* parse_if_stmt(OnyxParser* parser) { // Returns 1 if the symbol was consumed. Returns 0 otherwise // ret is set to the statement to insert -static b32 parse_expression_statement(OnyxParser* parser, OnyxAstNode** ret) { +static b32 parse_symbol_statement(OnyxParser* parser, OnyxAstNode** ret) { if (parser->curr_token->type != TOKEN_TYPE_SYMBOL) return 0; OnyxToken* symbol = expect(parser, TOKEN_TYPE_SYMBOL); @@ -272,6 +278,13 @@ static b32 parse_expression_statement(OnyxParser* parser, OnyxAstNode** ret) { case TOKEN_TYPE_SYM_COLON: { parser_next_token(parser); OnyxTypeInfo* type = &builtin_types[ONYX_TYPE_INFO_KIND_UNKNOWN]; + u32 flags = ONYX_AST_FLAG_LVAL; + + // NOTE: var: const ... + if (parser->curr_token->type == TOKEN_TYPE_KEYWORD_CONST) { + parser_next_token(parser); + flags |= ONYX_AST_FLAG_CONST; + } // NOTE: var: type if (parser->curr_token->type == TOKEN_TYPE_SYMBOL) { @@ -281,8 +294,9 @@ static b32 parse_expression_statement(OnyxParser* parser, OnyxAstNode** ret) { OnyxAstNodeLocal* local = (OnyxAstNodeLocal*) onyx_ast_node_new(parser->allocator, ONYX_AST_NODE_KIND_LOCAL); local->token = symbol; local->type = type; + local->flags |= flags; - insert_identifier(parser, local); + insert_local(parser, local); if (parser->curr_token->type == TOKEN_TYPE_SYM_EQUALS) { parser_next_token(parser); @@ -302,15 +316,36 @@ static b32 parse_expression_statement(OnyxParser* parser, OnyxAstNode** ret) { OnyxAstNode* lval = lookup_identifier(parser, symbol); + if (lval != NULL && lval->flags & ONYX_AST_FLAG_LVAL && (lval->flags & ONYX_AST_FLAG_CONST) == 0) { + OnyxAstNode* rval = parse_expression(parser); + OnyxAstNode* assignment = onyx_ast_node_new(parser->allocator, ONYX_AST_NODE_KIND_ASSIGNMENT); + assignment->right = rval; + assignment->left = lval; + *ret = assignment; + return 1; + } + + onyx_token_null_toggle(*symbol); if (lval == NULL) { - // TODO: error handling + onyx_message_add(parser->msgs, + ONYX_MESSAGE_TYPE_UNKNOWN_SYMBOL, + symbol->pos, symbol->token); + } + + else if ((lval->flags & ONYX_AST_FLAG_LVAL) == 0) { + onyx_message_add(parser->msgs, + ONYX_MESSAGE_TYPE_NOT_LVAL, + symbol->pos, symbol->token); } - OnyxAstNode* rval = parse_expression(parser); - OnyxAstNode* assignment = onyx_ast_node_new(parser->allocator, ONYX_AST_NODE_KIND_ASSIGNMENT); - assignment->right = rval; - assignment->left = lval; - *ret = assignment; + else if (lval->flags & ONYX_AST_FLAG_CONST) { + onyx_message_add(parser->msgs, + ONYX_MESSAGE_TYPE_ASSIGN_CONST, + symbol->pos, symbol->token); + } + onyx_token_null_toggle(*symbol); + + find_token(parser, TOKEN_TYPE_SYM_SEMICOLON); return 1; } @@ -351,7 +386,7 @@ static OnyxAstNode* parse_statement(OnyxParser* parser) { case TOKEN_TYPE_SYMBOL: { OnyxAstNode* ret = NULL; - if (parse_expression_statement(parser, &ret)) return ret; + if (parse_symbol_statement(parser, &ret)) return ret; // fallthrough } @@ -404,6 +439,8 @@ static OnyxAstNodeBlock* parse_block(OnyxParser* parser, b32 belongs_to_function parser->curr_token->pos, onyx_get_token_type_name(TOKEN_TYPE_SYM_SEMICOLON), onyx_get_token_type_name(parser->curr_token->type)); + + find_token(parser, TOKEN_TYPE_SYM_SEMICOLON); } parser_next_token(parser); } @@ -491,7 +528,8 @@ static OnyxAstNodeFuncDef* parse_function_definition(OnyxParser* parser) { OnyxTypeInfo* return_type = parse_type(parser); func_def->return_type = return_type; - // TODO: Add params to parser.identifiers + // BUG: if a param has the same name as a global or function, that global/function + // will no longer be in scope after the function body ends for (OnyxAstNodeParam* p = func_def->params; p != NULL; p = p->next) { onyx_token_null_toggle(*p->token); bh_hash_put(OnyxAstNode*, parser->identifiers, p->token->token, (OnyxAstNode*) p); @@ -500,7 +538,6 @@ static OnyxAstNodeFuncDef* parse_function_definition(OnyxParser* parser) { func_def->body = parse_block(parser, 1); - // TODO: Remove params from parser.identifiers for (OnyxAstNodeParam* p = func_def->params; p != NULL; p = p->next) { onyx_token_null_toggle(*p->token); bh_hash_delete(OnyxAstNode*, parser->identifiers, p->token->token); diff --git a/onyxparser.h b/onyxparser.h index 270deba3..3dfd782c 100644 --- a/onyxparser.h +++ b/onyxparser.h @@ -109,6 +109,8 @@ extern OnyxTypeInfo builtin_types[]; typedef enum OnyxAstFlags { // Top-level flags ONYX_AST_FLAG_EXPORTED = BH_BIT(1), + ONYX_AST_FLAG_LVAL = BH_BIT(2), + ONYX_AST_FLAG_CONST = BH_BIT(3), } OnyxAstFlags; struct OnyxAstNodeLocal { diff --git a/progs/minimal.onyx b/progs/minimal.onyx index d4f55aca..8e3b4d85 100644 --- a/progs/minimal.onyx +++ b/progs/minimal.onyx @@ -1,6 +1,7 @@ /* This is a comment */ -log :: proc (a i32, b i32) -> i32 ---; +/* Currently the "foreign" keyword doesn't do anything */ +foreign "console" log :: proc (a i32, b i32) -> i32 ---; export add :: proc (a i32, b i32) -> i32 { /* More comments */ @@ -8,9 +9,11 @@ export add :: proc (a i32, b i32) -> i32 { }; export mul :: proc (a i32, b i32) -> i32 { - c: i32 = a - b; - d := a + 2; + c: const i32 = a - b; + + /* Don't love this syntax, but it's easy to parse so whatever + Inferred type, but constant */ + d: const = a + 2; - e: i32; return c * d; }; -- 2.25.1