Пример #1
0
        public ProtoSpecDocument Parse()
        {
            ProtoSpecDocument document = new ProtoSpecDocument();

            ParseModules(document);

            return(document);
        }
Пример #2
0
        public TestScriptEvalContext(List <ProtoSpecModule> modules, Socket sock)
        {
            ProtoSpec = new ProtoSpecDocument();

            foreach (ProtoSpecModule module in modules)
            {
                ProtoSpec.Modules.Add(module);
            }

            Sock = sock;
        }
Пример #3
0
 public TestScriptEvalContext(ProtoSpecDocument protoSpec, Socket sock)
 {
     ProtoSpec = protoSpec;
     Sock      = sock;
 }
Пример #4
0
 public ProtoSpecModuleList(ProtoSpecDocument document)
 {
     Document = document;
 }
Пример #5
0
        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);
            }
        }