UnaryExpr and fix type check for BynaryExpr

This commit is contained in:
uan
2026-02-04 19:11:08 +01:00
parent fc79c23b77
commit 541d3c7c7f
3 changed files with 44 additions and 48 deletions

52
lexer.v
View File

@@ -26,6 +26,12 @@ enum TokenType as u8 {
greater_eq
less_eq
not_eq
plus_eq
minus_eq
star_eq
slash_eq
increment
decrement
lparen
rparen
lsqparen
@@ -46,43 +52,7 @@ struct Token {
}
fn str_from_toktype(type TokenType) string {
return match type {
.integer {'integer'}
.real {'real'}
.boolean {'boolean'}
.kw_let {'let'}
.type {'type'}
.kw_if {'if'}
.kw_else {'else'}
.kw_for {'for'}
.kw_break {'break'}
.kw_fn {'fn'}
.kw_return {'return'}
.identifier {'identifier'}
.eof {'EOF'}
.unknown {'unknown'}
.plus {'plus'}
.minus {'minus'}
.star {'star'}
.slash {'slash'}
.equals {'equals'}
.less {'less'}
.greater {'greater'}
.lparen {'lparen'}
.rparen {'rparen'}
.lsqparen {'lsqparen'}
.rsqparen {'rsqparen'}
.lbracket {'lbracket'}
.rbracket {'rbracket'}
.dot {'dot'}
.comma {'comma'}
.semicolon {'semicolon'}
.colon {'colon'}
.eq_eq {'eq eq'}
.greater_eq {'greater eq'}
.less_eq {'less eq'}
.not_eq {'not eq'}
}
return type.str()
}
fn toktype_from_delimiter(delimiter string) TokenType {
@@ -108,6 +78,12 @@ fn toktype_from_delimiter(delimiter string) TokenType {
'>=' {.greater_eq}
'<=' {.less_eq}
'!=' {.not_eq}
'+=' {.plus_eq}
'-=' {.minus_eq}
'*=' {.star_eq}
'/=' {.slash_eq}
'++' {.increment}
'--' {.decrement}
else {.unknown}
}
}
@@ -175,7 +151,7 @@ fn lex(input string) ?[]Token {
mut tok_str := input[right].ascii_str()
if right + 1 < input.len {
combined := input.substr(right, right + 2)
if combined in ['==', '>=', '<=', '!='] {
if combined in ['==', '>=', '<=', '!=', '+=', '-=', '*=', '/=', '++', '--'] {
tok_str = combined
right++
}