added parser for v1 (calculator with no types)

This commit is contained in:
Andrew Segavac
2020-04-08 00:04:36 -06:00
parent 7e8287c6cb
commit 76c539cf5c
10 changed files with 926 additions and 4 deletions

37
src/main.rs Normal file
View File

@@ -0,0 +1,37 @@
mod ast;
#[macro_use] extern crate lalrpop_util;
lalrpop_mod!(pub grammar); // synthesized by LALRPOP
fn main() {
println!("Hello, world!");
}
#[test]
fn grammar() {
assert!(grammar::LiteralIntParser::new().parse("22").is_ok());
assert!(grammar::IdentifierParser::new().parse("foo").is_ok());
assert!(grammar::LiteralIntParser::new().parse("2a").is_err());
assert!(grammar::TermParser::new().parse("22").is_ok());
assert!(grammar::TermParser::new().parse("foo").is_ok());
assert!(grammar::ExpressionParser::new().parse("22 * foo").is_ok());
assert!(grammar::ExpressionParser::new().parse("22 * 33").is_ok());
assert!(grammar::ExpressionParser::new().parse("(22 * 33) + 24").is_ok());
assert!(grammar::BlockParser::new().parse("{ (22 * 33) + 24 }").is_ok());
assert!(grammar::BlockParser::new().parse("{ }").is_err());
assert!(grammar::VariableDeclarationParser::new().parse("foo").is_ok());
assert!(grammar::VariableDeclarationParser::new().parse("1234").is_err());
assert!(grammar::FunctionParser::new().parse("fn add(a, b) { a + b }").is_ok());
assert!(grammar::FunctionParser::new().parse("fn random_dice_roll() { 4 }").is_ok());
assert!(grammar::FunctionParser::new().parse("fn add(a, b) { a + }").is_err());
assert!(grammar::FunctionParser::new().parse("fn add(a, b)").is_err());
assert!(grammar::ProgramParser::new().parse("fn add(a, b) { a + b }").is_ok());
assert!(grammar::ProgramParser::new().parse("fn add(a, b) { a + b } fn subtract(a, b) { a - b }").is_ok());
}