✨ comments using ';'.
parent
8317634e06
commit
71b6b2eabf
21
lib/lexer.c
21
lib/lexer.c
|
@ -33,12 +33,13 @@ struct token* lexer_try_new_next(struct lexer* self)
|
||||||
assert(self);
|
assert(self);
|
||||||
struct token* tok = NULL;
|
struct token* tok = NULL;
|
||||||
|
|
||||||
if (!status_is_ok(self->status) > 0)
|
if (!status_is_ok(self->status))
|
||||||
{
|
{
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
lexer_skip_spaces(self);
|
lexer_skip_spaces(self);
|
||||||
|
lexer_skip_comments(self);
|
||||||
|
|
||||||
if ( (tok=lexer_try_new_text(self, TOKEN_OPAR, "(")) )
|
if ( (tok=lexer_try_new_text(self, TOKEN_OPAR, "(")) )
|
||||||
{
|
{
|
||||||
|
@ -147,6 +148,23 @@ void lexer_skip_spaces(struct lexer* self)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void lexer_skip_comments(struct lexer* self)
|
||||||
|
{
|
||||||
|
assert(self);
|
||||||
|
|
||||||
|
while (self->context.cursor < self->len
|
||||||
|
&& self->source[self->context.cursor] == ';')
|
||||||
|
{
|
||||||
|
while (self->context.cursor < self->len
|
||||||
|
&& self->source[self->context.cursor] != '\n')
|
||||||
|
{
|
||||||
|
self->context.cursor++;
|
||||||
|
}
|
||||||
|
|
||||||
|
lexer_skip_spaces(self);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
struct token* lexer_try_new_int(struct lexer* self)
|
struct token* lexer_try_new_int(struct lexer* self)
|
||||||
{
|
{
|
||||||
assert(self);
|
assert(self);
|
||||||
|
@ -527,5 +545,6 @@ bool lexer_end(struct lexer* self)
|
||||||
{
|
{
|
||||||
assert(self);
|
assert(self);
|
||||||
lexer_skip_spaces(self);
|
lexer_skip_spaces(self);
|
||||||
|
lexer_skip_comments(self);
|
||||||
return self->context.cursor >= self->len;
|
return self->context.cursor >= self->len;
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,6 +30,7 @@ void lexer_free(struct lexer* self);
|
||||||
struct token* lexer_try_new_next(struct lexer* self);
|
struct token* lexer_try_new_next(struct lexer* self);
|
||||||
void lexer_skip(struct lexer* self, TokenKind kind);
|
void lexer_skip(struct lexer* self, TokenKind kind);
|
||||||
void lexer_skip_spaces(struct lexer* self);
|
void lexer_skip_spaces(struct lexer* self);
|
||||||
|
void lexer_skip_comments(struct lexer* self);
|
||||||
|
|
||||||
struct token* lexer_try_new_int(struct lexer* self);
|
struct token* lexer_try_new_int(struct lexer* self);
|
||||||
struct token* lexer_try_new_float(struct lexer* self);
|
struct token* lexer_try_new_float(struct lexer* self);
|
||||||
|
|
|
@ -47,8 +47,10 @@ struct node* parser_try_new_root(struct parser* self)
|
||||||
while (!lexer_end(self->lexer))
|
while (!lexer_end(self->lexer))
|
||||||
{
|
{
|
||||||
struct node* expr = MK_TRY(parser_try_new_expr);
|
struct node* expr = MK_TRY(parser_try_new_expr);
|
||||||
|
|
||||||
if (!expr && !lexer_end(self->lexer))
|
if (!expr && !lexer_end(self->lexer))
|
||||||
{
|
{
|
||||||
|
printf("not at end: %c\n", self->lexer->source[self->lexer->context.cursor]);
|
||||||
node_free(root);
|
node_free(root);
|
||||||
free(root);
|
free(root);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -117,7 +119,6 @@ struct node* parser_try_new_call(struct parser* self)
|
||||||
}
|
}
|
||||||
|
|
||||||
lexer_skip(self->lexer, TOKEN_CPAR);
|
lexer_skip(self->lexer, TOKEN_CPAR);
|
||||||
|
|
||||||
return call;
|
return call;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -184,6 +185,8 @@ struct node* parser_try_new_atom(struct parser* self)
|
||||||
self->lexer->context.line);
|
self->lexer->context.line);
|
||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,8 @@
|
||||||
G(TOKEN_INT), G(TOKEN_FLOAT), \
|
G(TOKEN_INT), G(TOKEN_FLOAT), \
|
||||||
G(TOKEN_BOOL), G(TOKEN_STRING), \
|
G(TOKEN_BOOL), G(TOKEN_STRING), \
|
||||||
G(TOKEN_SYMBOL), G(TOKEN_IDENT), \
|
G(TOKEN_SYMBOL), G(TOKEN_IDENT), \
|
||||||
G(TOKEN_OPAR), G(TOKEN_CPAR)
|
G(TOKEN_OPAR), G(TOKEN_CPAR), \
|
||||||
|
G(TOKEN_EOF)
|
||||||
|
|
||||||
MK_ENUM_H(TokenKind, TOKEN_KIND);
|
MK_ENUM_H(TokenKind, TOKEN_KIND);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue