Пример #1
0
        public StructFile LoadStructs(string fileName, string strsText)
        {
            StructSourceContext context = new StructSourceContext();

            context.AddSourceText(fileName, strsText);
            return(LoadStructs(fileName, context));
        }
Пример #2
0
 public StructFile LoadStructs(string fileName, StructSourceContext context)
 {
     StructFile result = new StructFile(fileName.Length > 0 ? Path.GetDirectoryName(fileName) : "");
     _curStructFile = result;
     LoadStructFile(fileName, context);
     foreach(ReferenceBase reference in result.References)
     {
         try
         {
             reference.Resolve();
         }
         catch(ParseException ex)
         {
             _errors.Add(ex);
         }
     }
     if (_errors.Count == 0)
         return result;
     return null;
 }
Пример #3
0
        public StructFile LoadStructs(string fileName, StructSourceContext context)
        {
            StructFile result = new StructFile(fileName.Length > 0 ? Path.GetDirectoryName(fileName) : "");

            _curStructFile = result;
            LoadStructFile(fileName, context);
            foreach (ReferenceBase reference in result.References)
            {
                try
                {
                    reference.Resolve();
                }
                catch (ParseException ex)
                {
                    _errors.Add(ex);
                }
            }
            if (_errors.Count == 0)
            {
                return(result);
            }
            return(null);
        }
Пример #4
0
        private void LoadStructFile(string fileName, StructSourceContext context)
        {
            StructLexer lexer = new StructLexer(fileName, context.GetSourceText(fileName));

            while (!lexer.EndOfStream())
            {
                List <Attribute> attrs = new List <Attribute>();
                LoadAttributes(lexer, attrs);
                string token = lexer.GetNextToken(StructTokenType.String);
                if (token == "struct")
                {
                    LoadStruct(lexer, attrs);
                }
                else if (token == "enum")
                {
                    LoadEnum(lexer, attrs);
                }
                else if (token == "alias")
                {
                    LoadAlias(lexer, attrs);
                }
                else if (token == "plugin")
                {
                    LoadPlugin(lexer);
                }
                else if (token == "include")
                {
                    string includeName = lexer.GetNextToken(StructTokenType.String);
                    lexer.GetNextToken(StructTokenType.Semicolon);
                    LoadStructFile(includeName, context);
                }
                else
                {
                    throw new Exception("Unexpected top-level item " + token);
                }
            }
        }
Пример #5
0
 private void ParseStructures()
 {
     StructParser parser = new StructParser();
     try
     {
         StructSourceContext context = new StructSourceContext();
         context.BaseDirectory = Path.GetDirectoryName(_structFileName);
         context.AddSourceText(_structFileName, _structEditControl.Text);
         _structFile = parser.LoadStructs(_structFileName, context);
     }
     catch(ParseException ex)
     {
         MessageBox.Show(this, "Error in " + ex.Position + ": " + ex.Message);
         List<ParseException> list = new List<ParseException>();
         list.Add(ex);
         HighlightErrors(list.AsReadOnly());
         return;
     }
     catch(Exception ex)
     {
         MessageBox.Show(this, "Error loading structures: " + ex.Message);
     }
     HighlightErrors(parser.Errors);
     if (parser.Errors.Count > 0)
     {
         ParseException ex = parser.Errors[0];
         MessageBox.Show(this, "Error in " + ex.Position + ": " + ex.Message);
     }
 }
Пример #6
0
 public StructFile LoadStructs(string fileName, string strsText)
 {
     StructSourceContext context = new StructSourceContext();
     context.AddSourceText(fileName, strsText);
     return LoadStructs(fileName, context);
 }
Пример #7
0
 private void LoadStructFile(string fileName, StructSourceContext context)
 {
     StructLexer lexer = new StructLexer(fileName, context.GetSourceText(fileName));
     while(!lexer.EndOfStream())
     {
         List<Attribute> attrs = new List<Attribute>();
         LoadAttributes(lexer, attrs);
         string token = lexer.GetNextToken(StructTokenType.String);
         if (token == "struct")
             LoadStruct(lexer, attrs);
         else if (token == "enum")
             LoadEnum(lexer, attrs);
         else if (token == "alias")
             LoadAlias(lexer, attrs);
         else if (token == "plugin")
             LoadPlugin(lexer);
         else if (token == "include")
         {
             string includeName = lexer.GetNextToken(StructTokenType.String);
             lexer.GetNextToken(StructTokenType.Semicolon);
             LoadStructFile(includeName, context);
         }
         else
             throw new Exception("Unexpected top-level item " + token);
     }
 }