public ProtoSpecDocument Parse() { ProtoSpecDocument document = new ProtoSpecDocument(); ParseModules(document); return(document); }
public TestScriptEvalContext(List <ProtoSpecModule> modules, Socket sock) { ProtoSpec = new ProtoSpecDocument(); foreach (ProtoSpecModule module in modules) { ProtoSpec.Modules.Add(module); } Sock = sock; }
public TestScriptEvalContext(ProtoSpecDocument protoSpec, Socket sock) { ProtoSpec = protoSpec; Sock = sock; }
public ProtoSpecModuleList(ProtoSpecDocument document) { Document = document; }
private void ParseModules(ProtoSpecDocument document) { while (true) { ResetEnumContext(); NextToken(); if (CurrentToken.Type != ProtoSpecTokenType.Identifier) { if (CurrentToken.Type != ProtoSpecTokenType.EndOfFile) { Error("缺少模块名"); } break; } string name = CurrentToken.Text; CurrentModule = name; NextToken(); if (CurrentToken.Type != ProtoSpecTokenType.Equal) { Error("模块名后缺少'='"); break; } NextToken(); if (CurrentToken.Type != ProtoSpecTokenType.Numeral) { Error("模块ID不是有效数值"); break; } string moduleId = CurrentToken.Text; ProtoSpecModule module = new ProtoSpecModule(name, moduleId); NextToken(); if (CurrentToken.Type != ProtoSpecTokenType.LeftBrace) { Error("模块主体起始位置,缺少'{'"); break; } ParseModuleBody(module); if (CurrentToken.Type != ProtoSpecTokenType.RightBrace) { Error("模块主体结束位置,缺少'}'"); break; } ExportEnumValues(module.EnumValues); document.Modules.Add(module); } }