private ScriptExpressionTable LoadSyntax(IReader reader, StructureValueCollection values, StringTableReader stringReader) { var stringsSize = (int)values.GetInteger("script string table size"); var tableSize = (int)values.GetInteger("script syntax table size"); uint tableAddress = (uint)values.GetInteger("script syntax table address"); long expand = _expander.Expand(tableAddress); StructureLayout headerLayout = _buildInfo.Layouts.GetLayout("script syntax table header"); StructureValueCollection[] headerEntry = TagBlockReader.ReadTagBlock(reader, 1, expand, headerLayout, _metaArea); int count = (int)headerEntry[0].GetInteger("element count"); StructureLayout layout = _buildInfo.Layouts.GetLayout("script syntax table element"); StructureValueCollection[] entries = TagBlockReader.ReadTagBlock(reader, count, expand + headerLayout.Size, layout, _metaArea); var result = new ScriptExpressionTable(); result.AddExpressions(entries.Select((e, i) => new ScriptExpression(e, (ushort)i, stringReader, stringsSize))); foreach (ScriptExpression expr in result.Where(expr => expr != null)) { expr.ResolveReferences(result); } return(result); }