From a01075f6801f0310f3de4fe85f0d8ed2c21c47a9 Mon Sep 17 00:00:00 2001 From: WormHeamer Date: Fri, 1 Aug 2025 18:42:28 -0400 Subject: add comments --- lex.c | 9 +++++++++ main.c | 7 ++++--- test.lang | 8 ++++++++ 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/lex.c b/lex.c index 7a1d345..12cd284 100644 --- a/lex.c +++ b/lex.c @@ -127,10 +127,19 @@ Token ident_to_keyword(Str ident) { #define T(t) (l->tok = t) void lex_next(Lexer *l) { +recurse: int i = l->ofs; + while (i < l->buf.n && is_space(l->buf.s[i])) { i++; } + + if (str_starts(str_skip(l->buf, i), S("/*"))) { + Str f = str_find(str_skip(l->buf, i), S("*/")); + l->ofs = (f.s - l->buf.s) + 2; + goto recurse; + } + int start_ofs = i; l->ident = (Str) { &l->buf.s[start_ofs], 0 }; if (i >= l->buf.n) { diff --git a/main.c b/main.c index 59a41a2..e8df555 100644 --- a/main.c +++ b/main.c @@ -132,19 +132,20 @@ void parse_expr(Lexer *l) { } } -void parse_decl(Lexer *l) { +void parse_toplevel(Lexer *l) { switch (l->tok) { case TOK_PROC: parse_proc(l); break; default: - lex_error(l, LE_ERROR, S("Invalid declaration statement")); + lex_expected(l, TMASK(TOK_PROC)); + break; } } void parse_unit(Lexer *l) { while (l->tok != TOK_EOF) { - parse_decl(l); + parse_toplevel(l); } } diff --git a/test.lang b/test.lang index 7559516..44c3cf4 100644 --- a/test.lang +++ b/test.lang @@ -1,3 +1,11 @@ +/* comments! */ + +/* + * var f proc(i32) + * var g func(i32) i32 + * let x = g + */ + proc main { return 1 } -- cgit v1.2.3