public bool Parse(string Text) { compilerDirectives = new List <compiler_directive>(); PT parsertools = new PT(); // контекст сканера и парсера parsertools.errors = Errs; parsertools.CurrentFileName = Path.GetFullPath(FileName); var scanner = new PreprocessorScanner(); scanner.SetSource(Text, 0); //scanner.parsertools = parsertools;// передали parsertools в объект сканера var parser = new PreprocessorParser(scanner); parser.compilerDirectives = compilerDirectives; //parser.parsertools = parsertools; // передали parsertools в объект парсера if (!parser.Parse()) { parsertools.AddError("Неопознанная синтаксическая ошибка препроцессора!", null); return(false); } return(true); }
public syntax_tree_node Parse(string Text) { #if DEBUG #if _ERR FileInfo f = new FileInfo(FileName); var sv = Path.ChangeExtension(FileName, ".grmtrack1"); var sw = new StreamWriter(sv); Console.SetError(sw); #endif #endif PT parsertools = new PT(); // контекст сканера и парсера parsertools.errors = Errs; parsertools.warnings = Warnings; parsertools.CurrentFileName = Path.GetFullPath(FileName); Scanner scanner = new Scanner(); scanner.SetSource(Text, 0); scanner.parsertools = parsertools;// передали parsertools в объект сканера if (DefinesList != null) { scanner.Defines.AddRange(DefinesList); } GPPGParser parser = new GPPGParser(scanner); parsertools.build_tree_for_formatter = build_tree_for_formatter; parser.parsertools = parsertools; // передали parsertools в объект парсера if (!parser.Parse()) { if (Errs.Count == 0) { parsertools.AddError("Неопознанная синтаксическая ошибка!", null); } } #if DEBUG #if _ERR sw.Close(); #endif #endif return(parser.root); }