private AstClass ParseClass() { var _class = new AstClass(); Expect(Ktoken.Class); _class.StName = Expect(Ktoken.Id).St; Expect(Ktoken.Lbrace); _class.RgclassDecl = ParseRgClassDecl().ToArray(); _class.Rgsubroutine = ParseRgSubroutine().ToArray(); Expect(Ktoken.Rbrace); Expect(Ktoken.Eof); return(_class); }
private void CompileClass(AstClass node, Syt syt, StringBuilder sb) { syt.Add(Ksyte.Class, node.StName, node.StName); CompileRecursive(node.RgclassDecl, syt, sb); foreach (var astSubroutine in node.Rgsubroutine) { Ksyte ksyte; switch (astSubroutine.Ksubroutine) { case Ksubroutine.Constructor: ksyte = Ksyte.Constructor; break; case Ksubroutine.MemberFunction: ksyte = Ksyte.MemberFunction; break; case Ksubroutine.StaticFunction: ksyte = Ksyte.StaticFunction; break; default: throw new ArgumentOutOfRangeException(); } syt.Add(ksyte, astSubroutine.StName, null); } CompileRecursive(node.Rgsubroutine, syt, sb); }