lang: rewrite parser

This commit is contained in:
Schrottkatze 2024-04-24 11:07:38 +02:00
commit 381ab45edc
No known key found for this signature in database
25 changed files with 524 additions and 1161 deletions

View file

@ -1,143 +1 @@
use crate::parser::ast::File;
use crate::parser::parse;
use crate::tokens::Token;
use chumsky::input::Stream;
use chumsky::prelude::*;
use indexmap::IndexMap;
use logos::Logos;
// #[test]
// fn test_parse_node_with_params() {
// const INPUT: &str = "meow [ hello: $foo, world: @bar]";
// assert_eq!(
// parse(INPUT).unwrap(),
// File {
// decls: IndexMap::from_iter([(
// ("main", (0..0).into()),
// (
// Expr::Node(
// ("meow", (0..4).into()),
// Some((
// IndexMap::from_iter([
// (
// ("hello", (7..12).into()),
// Expr::Var(("foo", (14..18).into()))
// ),
// (
// ("world", (20..25).into()),
// Expr::InputVar(("bar", (27..31).into()))
// )
// ]),
// (5..32).into()
// ))
// ),
// (0..32).into()
// )
// )])
// }
// );
// }
// fn test_parse_multiple_top_level_complex() {
// const INPUT: &str = r"def main = meow
// | uwu
// [ foo: @bar
// , hello: world @| test [ more: params ] | yay
// ]
// !| awa
// @| nya
// | rawr;
// def test = meow
// [ hello: $foo
// , world: @bar
// ];
// ";
// assert_eq!(
// parse(INPUT).unwrap(),
// File {
// decls: IndexMap::from_iter([
// (
// ("main", (4..8).into()),
// (
// Expr::SimplePipe(
// Box::new(Expr::Node(("meow", (11..15).into()), None)),
// Box::new(Expr::NullPipe(
// Box::new(Expr::Node(
// ("uwu", (20..23).into()),
// Some((
// IndexMap::from_iter([
// (
// ("foo", (29..32).into()),
// Expr::InputVar(("bar", (34..38).into()))
// ),
// (
// ("hello", (44..49).into()),
// Expr::MappingPipe(
// Box::new(Expr::Node(
// ("world", (51..56).into()),
// None
// )),
// Box::new(Expr::SimplePipe(
// Box::new(Expr::Node(
// ("test", (60..64).into()),
// Some((
// IndexMap::from_iter([(
// ("more", (67..71).into()),
// Expr::Node(
// ("params", (73..79).into()),
// None
// )
// )]),
// (65..81).into()
// ))
// )),
// Box::new(Expr::Node(
// ("yay", (84..87).into()),
// None
// ))
// ))
// )
// )
// ]),
// (27..92).into()
// ))
// )),
// Box::new(Expr::MappingPipe(
// Box::new(Expr::Node(("awa", (97..100).into()), None)),
// Box::new(Expr::SimplePipe(
// Box::new(Expr::Node(("nya", (106..109).into()), None)),
// Box::new(Expr::Node(("rawr", (114..118).into()), None))
// ))
// ))
// ))
// ),
// (11..118).into()
// ),
// ),
// (
// ("test", (125..129).into()),
// (
// Expr::Node(
// ("meow", (132..136).into()),
// Some((
// IndexMap::from_iter([
// (
// ("hello", (141..146).into()),
// Expr::Var(("foo", (148..152).into()))
// ),
// (
// ("world", (156..161).into()),
// Expr::InputVar(("bar", (163..167).into()))
// )
// ]),
// (139..171).into()
// ))
// ),
// (132..171).into()
// )
// )
// ])
// }
// );
// }