1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
use crate::lexer::token::TokenStream;


pub mod iterator;
pub mod pred;
pub mod ast;

pub mod common;

pub mod texpr;
pub mod expr;
pub mod patt;
pub mod stmt;


use iterator::ParserIterator;
use ast::AST;

use stmt::statements;


pub fn parse (mut stream: TokenStream) -> AST {
  let mut it = ParserIterator::new(&mut stream);

  let top_level = statements(&mut it);

  if it.valid() {
    it.simple_error("Unable to parse remaining top level statements".to_string());
  }

  AST {
    top_level,
    source: stream.source
  }
}