From e2e0ed950bb147ebca3b9ac879268feeb185e20b Mon Sep 17 00:00:00 2001 From: Carlos Maniero Date: Wed, 3 May 2023 23:17:50 -0300 Subject: parser: Introduce statement keywords This commit introduces a few changes in pipalang syntax. Now, both functions and variables requires keywords to be defined. before: main(): i32 { a: i32 = 2; return a; } now: fn main(): i32 { let a: i32 = 2; return a; } Signed-off-by: Carlos Maniero Reviewed-by: Johnny Richard --- src/lexer.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'src/lexer.c') diff --git a/src/lexer.c b/src/lexer.c index 3f6948a..56e24af 100644 --- a/src/lexer.c +++ b/src/lexer.c @@ -97,10 +97,18 @@ lexer_tokenize_name(lexer_t *lexer, token_t *token) static void lexer_token_process_keyword(token_t *token) { + if (string_view_eq(string_view_from_str("let"), token->value)) { + token->kind = TOKEN_KEYWORD_LET; + return; + } if (string_view_eq(string_view_from_str("return"), token->value)) { token->kind = TOKEN_KEYWORD_RETURN; return; } + if (string_view_eq(string_view_from_str("fn"), token->value)) { + token->kind = TOKEN_KEYWORD_FN; + return; + } } void @@ -318,6 +326,10 @@ token_kind_to_str(token_kind_t kind) return "="; case TOKEN_KEYWORD_RETURN: return "return"; + case TOKEN_KEYWORD_FN: + return "fn"; + case TOKEN_KEYWORD_LET: + return "let"; case TOKEN_EOF: return "TOKEN_EOF"; case TOKEN_UNKNOWN: -- cgit v1.2.3