lc3_toolchain/ast/
parse.rs

1use crate::ast::processed_ast::{Program, StandardTransform};
2use crate::ast::raw_ast::parse_ast;
3use pest::Parser;
4use pest_derive::Parser;
5
6#[derive(Parser)]
7#[grammar = "lc3.pest"]
8struct LC3Parser;
9
10pub fn get_ast(content: &str) -> Result<Program, pest::error::Error<Rule>> {
11    match LC3Parser::parse(Rule::Program, content) {
12        Ok(pairs) => {
13            let program = parse_ast(pairs.into_iter().next().unwrap());
14            let program = StandardTransform::new(true, content).transform(program);
15            Ok(program)
16        }
17        Err(e) => Err(e),
18    }
19}