2024-04-24 19:37:52 +02:00
|
|
|
use crate::parser::{syntax_kind::SyntaxKind::*, CompletedMarker, Parser};
|
2024-04-24 11:07:38 +02:00
|
|
|
|
2024-04-24 19:37:52 +02:00
|
|
|
use self::{collection::collection, instruction::instr, lit::literal};
|
2024-04-24 11:07:38 +02:00
|
|
|
|
2024-04-24 20:00:17 +02:00
|
|
|
mod collection;
|
2024-04-24 11:07:38 +02:00
|
|
|
mod instruction;
|
|
|
|
mod lit;
|
2024-04-24 19:37:52 +02:00
|
|
|
|
|
|
|
pub fn expression(p: &mut Parser) -> Option<CompletedMarker> {
|
2024-04-24 19:55:16 +02:00
|
|
|
let expr = p.start("expr");
|
2024-04-24 11:07:38 +02:00
|
|
|
|
2024-04-24 19:37:52 +02:00
|
|
|
if atom(p).or_else(|| instr(p)).is_none() {
|
|
|
|
expr.abandon(p);
|
|
|
|
return None;
|
|
|
|
}
|
|
|
|
|
|
|
|
Some(expr.complete(p, EXPR))
|
|
|
|
}
|
2024-04-24 11:07:38 +02:00
|
|
|
|
2024-04-24 19:37:52 +02:00
|
|
|
pub fn atom(p: &mut Parser) -> Option<CompletedMarker> {
|
|
|
|
literal(p).or_else(|| collection(p))
|
2024-04-24 11:07:38 +02:00
|
|
|
}
|