コード例 #1
0
        private SectionBase ParseSection()
        {
            string headText = tape.Current.GetText();

            if (headText.StartsWith("导入"))
            {
                SectionImport section = ParseImport();
                return(section);
            }
            else if (headText.StartsWith("使用"))
            {
                SectionUse section = ParseUse();
                return(section);
            }
            else if (headText.StartsWith("约定"))
            {
                SectionEnum section = ParseEnum();
                return(section);
            }
            else if (headText.StartsWith("声明"))
            {
                SectionDim section = ParseDim();
                return(section);
            }
            else if (headText.EndsWith("类型"))
            {
                SectionClassName section = ParseClass();
                return(section);
            }
            else if (headText.EndsWith("属性"))
            {
                SectionProperties section = ParseProperties();
                return(section);
            }
            else
            {
                SectionProc section = ParseProc();
                if (section.NamePart.IsConstructor())
                {
                    SectionConstructor constructor = new SectionConstructor(section);
                    return(constructor);
                }
                else
                {
                    return(section);
                }
                //tape.error("错误的段落");
                //tape.MoveNext();
                //return null;
            }
        }
コード例 #2
0
        private SectionDim ParseDim()
        {
            SectionDim ast       = new SectionDim();
            Token      headToken = tape.Current;

            if (headToken.GetText() == "声明")
            {
                ast.KeyToken = headToken;
            }
            else
            {
                ast.KeyToken  = new Token("声明", TokenKind.Ident, headToken.Line, headToken.Col);
                ast.NameToken = new Token(headToken.GetText().Substring(2), TokenKind.Ident, headToken.Line, headToken.Col + 2);
            }
            tape.MoveNext();
            tape.Match(TokenKind.Colon);
            ast.Dims = ParseDimList();
            return(ast);
        }
コード例 #3
0
            private void _read()
            {
                _name = System.Text.Encoding.GetEncoding("ASCII").GetString(m_io.ReadBytes(4));
                _size = m_io.ReadU4le();
                switch (Name)
                {
                case "SLBR": {
                    __raw_body = m_io.ReadBytes(Size);
                    var io___raw_body = new KaitaiStream(__raw_body);
                    _body = new SectionStartingResource(io___raw_body, this, m_root);
                    break;
                }

                case "ERAX": {
                    __raw_body = m_io.ReadBytes(Size);
                    var io___raw_body = new KaitaiStream(__raw_body);
                    _body = new SectionEra(io___raw_body, this, m_root);
                    break;
                }

                case "OWNR": {
                    __raw_body = m_io.ReadBytes(Size);
                    var io___raw_body = new KaitaiStream(__raw_body);
                    _body = new SectionOwnr(io___raw_body, this, m_root);
                    break;
                }

                case "ERA ": {
                    __raw_body = m_io.ReadBytes(Size);
                    var io___raw_body = new KaitaiStream(__raw_body);
                    _body = new SectionEra(io___raw_body, this, m_root);
                    break;
                }

                case "SGLD": {
                    __raw_body = m_io.ReadBytes(Size);
                    var io___raw_body = new KaitaiStream(__raw_body);
                    _body = new SectionStartingResource(io___raw_body, this, m_root);
                    break;
                }

                case "VER ": {
                    __raw_body = m_io.ReadBytes(Size);
                    var io___raw_body = new KaitaiStream(__raw_body);
                    _body = new SectionVer(io___raw_body, this, m_root);
                    break;
                }

                case "SOIL": {
                    __raw_body = m_io.ReadBytes(Size);
                    var io___raw_body = new KaitaiStream(__raw_body);
                    _body = new SectionStartingResource(io___raw_body, this, m_root);
                    break;
                }

                case "UNIT": {
                    __raw_body = m_io.ReadBytes(Size);
                    var io___raw_body = new KaitaiStream(__raw_body);
                    _body = new SectionUnit(io___raw_body, this, m_root);
                    break;
                }

                case "DIM ": {
                    __raw_body = m_io.ReadBytes(Size);
                    var io___raw_body = new KaitaiStream(__raw_body);
                    _body = new SectionDim(io___raw_body, this, m_root);
                    break;
                }

                case "TYPE": {
                    __raw_body = m_io.ReadBytes(Size);
                    var io___raw_body = new KaitaiStream(__raw_body);
                    _body = new SectionType(io___raw_body, this, m_root);
                    break;
                }

                default: {
                    _body = m_io.ReadBytes(Size);
                    break;
                }
                }
            }