import lexer_example
@with_lexer(foo_lexer)
grammar foo_grammar {
    @main_rule main_rule <- list+(or(var_decl | fun_decl))
    var_decl <- VarDecl("var" identifier)
    fun_decl <- FunDecl("def" identifier)
    identifier <- Identifier(@identifier)

}

@abstract class FooNode : Node {
}

@abstract class Decl : FooNode {
    @parse_field name : Identifier

    @export fun prop (arg : Bool = false): Bool = arg
}

class FunDecl : Decl {
}

class VarDecl : Decl {

    fun prop (arg : Bool = false): Bool = not arg
}

class Identifier : FooNode implements TokenNode {
}
