1
0
Fork 0

Add assignment parsing

This commit is contained in:
Vili Sinervä 2025-01-31 14:19:01 +02:00
parent 3080313e8c
commit 22083ae1f2
No known key found for this signature in database
GPG key ID: DF8FEAF54EFAC996
2 changed files with 17 additions and 2 deletions

View file

@ -39,8 +39,17 @@ fn parse_expression<'source>(
];
match level {
// 0 => todo!(),
0..=6 => {
0 => {
let left = parse_expression(level + 1, pos, tokens);
if OPS[level].contains(&peek(pos, tokens).text) {
let operator_token = consume_strings(pos, tokens, OPS[level]);
let right = parse_expression(level, pos, tokens);
BinaryOp(Box::new(left), operator_token.text, Box::new(right))
} else {
left
}
}
1..=6 => {
let mut left = parse_expression(level + 1, pos, tokens);
while OPS[level].contains(&peek(pos, tokens).text) {
let operator_token = consume_strings(pos, tokens, OPS[level]);

View file

@ -150,6 +150,12 @@ fn test_assignment_chain() {
);
}
#[test]
#[should_panic]
fn test_assignment_invalid() {
parse(&tokenize("a ="));
}
#[test]
fn test_unary_basic() {
let result = parse(&tokenize("not x"));