Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }