refactor: add comments in ast.scala

This commit is contained in:
Jonny 2025-02-07 16:28:58 +00:00
parent 09036040d6
commit 764e335364

View File

@ -8,7 +8,8 @@ import parsley.syntax.zipped._
import cats.data.NonEmptyList import cats.data.NonEmptyList
object ast { object ast {
// Expressions /* ============================ EXPRESSIONS ============================ */
sealed trait Expr extends RValue { sealed trait Expr extends RValue {
val pos: Position val pos: Position
} }
@ -19,7 +20,8 @@ object ast {
sealed trait Expr5 extends Expr4 sealed trait Expr5 extends Expr4
sealed trait Expr6 extends Expr5 sealed trait Expr6 extends Expr5
// Atoms /* ============================ ATOMIC EXPRESSIONS ============================ */
case class IntLiter(v: Int)(val pos: Position) extends Expr6 case class IntLiter(v: Int)(val pos: Position) extends Expr6
object IntLiter extends ParserBridgePos1[Int, IntLiter] object IntLiter extends ParserBridgePos1[Int, IntLiter]
case class BoolLiter(v: Boolean)(val pos: Position) extends Expr6 case class BoolLiter(v: Boolean)(val pos: Position) extends Expr6
@ -44,7 +46,8 @@ object ast {
case class Parens(expr: Expr)(val pos: Position) extends Expr6 case class Parens(expr: Expr)(val pos: Position) extends Expr6
object Parens extends ParserBridgePos1[Expr, Parens] object Parens extends ParserBridgePos1[Expr, Parens]
// Unary operators /* ============================ UNARY OPERATORS ============================ */
sealed trait UnaryOp extends Expr { sealed trait UnaryOp extends Expr {
val x: Expr val x: Expr
} }
@ -59,7 +62,8 @@ object ast {
case class Chr(x: Expr6)(val pos: Position) extends Expr6 with UnaryOp case class Chr(x: Expr6)(val pos: Position) extends Expr6 with UnaryOp
object Chr extends ParserBridgePos1[Expr6, Chr] object Chr extends ParserBridgePos1[Expr6, Chr]
// Binary operators /* ============================ BINARY OPERATORS ============================ */
sealed trait BinaryOp(val name: String) extends Expr { sealed trait BinaryOp(val name: String) extends Expr {
val x: Expr val x: Expr
val y: Expr val y: Expr
@ -101,7 +105,8 @@ object ast {
case class Or(x: Expr1, y: Expr)(val pos: Position) extends Expr with BinaryOp("logical or") case class Or(x: Expr1, y: Expr)(val pos: Position) extends Expr with BinaryOp("logical or")
object Or extends ParserBridgePos2[Expr1, Expr, Or] object Or extends ParserBridgePos2[Expr1, Expr, Or]
// Types /* ============================ TYPES ============================ */
sealed trait Type sealed trait Type
sealed trait BaseType extends Type with PairElemType sealed trait BaseType extends Type with PairElemType
case class IntType()(val pos: Position) extends BaseType case class IntType()(val pos: Position) extends BaseType
@ -125,11 +130,13 @@ object ast {
case class UntypedPairType()(val pos: Position) extends PairElemType case class UntypedPairType()(val pos: Position) extends PairElemType
object UntypedPairType extends ParserBridgePos0[UntypedPairType] object UntypedPairType extends ParserBridgePos0[UntypedPairType]
// waccadoodledo /* ============================ PROGRAM STRUCTURE ============================ */
case class Program(funcs: List[FuncDecl], main: NonEmptyList[Stmt])(val pos: Position) case class Program(funcs: List[FuncDecl], main: NonEmptyList[Stmt])(val pos: Position)
object Program extends ParserBridgePos2[List[FuncDecl], NonEmptyList[Stmt], Program] object Program extends ParserBridgePos2[List[FuncDecl], NonEmptyList[Stmt], Program]
// Function Definitions /* ============================ FUNCTION STRUCTURE ============================ */
case class FuncDecl( case class FuncDecl(
returnType: Type, returnType: Type,
name: Ident, name: Ident,
@ -151,7 +158,8 @@ object ast {
case class Param(paramType: Type, name: Ident)(val pos: Position) case class Param(paramType: Type, name: Ident)(val pos: Position)
object Param extends ParserBridgePos2[Type, Ident, Param] object Param extends ParserBridgePos2[Type, Ident, Param]
// Statements /* ============================ STATEMENTS ============================ */
sealed trait Stmt sealed trait Stmt
case class Skip()(val pos: Position) extends Stmt case class Skip()(val pos: Position) extends Stmt
object Skip extends ParserBridgePos0[Skip] object Skip extends ParserBridgePos0[Skip]
@ -178,6 +186,8 @@ object ast {
case class Block(stmt: NonEmptyList[Stmt])(val pos: Position) extends Stmt case class Block(stmt: NonEmptyList[Stmt])(val pos: Position) extends Stmt
object Block extends ParserBridgePos1[NonEmptyList[Stmt], Block] object Block extends ParserBridgePos1[NonEmptyList[Stmt], Block]
/* ============================ LVALUES & RVALUES ============================ */
sealed trait LValue { sealed trait LValue {
val pos: Position val pos: Position
} }
@ -196,7 +206,8 @@ object ast {
case class Snd(elem: LValue)(val pos: Position) extends PairElem case class Snd(elem: LValue)(val pos: Position) extends PairElem
object Snd extends ParserBridgePos1[LValue, Snd] object Snd extends ParserBridgePos1[LValue, Snd]
// Parser bridges /* ============================ PARSER BRIDGES ============================ */
case class Position(line: Int, column: Int) case class Position(line: Int, column: Int)
trait ParserSingletonBridgePos[+A] extends ErrorBridge { trait ParserSingletonBridgePos[+A] extends ErrorBridge {