public StructFile LoadStructs(string fileName, string strsText) { StructSourceContext context = new StructSourceContext(); context.AddSourceText(fileName, strsText); return(LoadStructs(fileName, context)); }
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; }
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); }
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); } } }
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); } }
public StructFile LoadStructs(string fileName, string strsText) { StructSourceContext context = new StructSourceContext(); context.AddSourceText(fileName, strsText); return LoadStructs(fileName, context); }
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); } }