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; } }
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); }
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; } } }