ast.rs 757 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. type Name = String;
  2. #[derive(Debug)]
  3. pub enum Stmt {
  4. Puts(Expr),
  5. Fix(Name),
  6. Assn(Name, Expr),
  7. LitAssn(Name, Vec<String>),
  8. }
  9. #[derive(Debug)]
  10. pub enum Expr {
  11. Var(Name),
  12. Cat(Vec<Expr>),
  13. Chc(Vec<Choice>),
  14. Rep(i64, Box<Expr>),
  15. Lit(Literal),
  16. Ap(Box<Expr>, Box<Expr>),
  17. Tup(Vec<Expr>),
  18. Let(Name, Box<Expr>, Box<Expr>),
  19. Fun(Vec<Case>),
  20. Case(Box<Expr>, Vec<Case>),
  21. }
  22. #[derive(Debug)]
  23. pub struct Case {
  24. pub pat: Pat,
  25. pub expr: Expr,
  26. }
  27. #[derive(Debug)]
  28. pub enum Pat {
  29. Var(Name),
  30. Lit(Literal),
  31. Tup(Vec<Pat>),
  32. }
  33. #[derive(Debug)]
  34. pub struct Choice {
  35. pub weight: Option<i64>,
  36. pub value: Expr,
  37. }
  38. #[derive(Debug)]
  39. pub enum Literal {
  40. Str(String),
  41. Atom(String),
  42. Num(i64),
  43. }