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.CurrentFileName = Path.GetFullPath(FileName); Scanner scanner = new Scanner(); scanner.SetSource(Text, 0); scanner.parsertools = parsertools;// передали parsertools в объект сканера 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; }
public override syntax_tree_node BuildTreeInNormalMode(string FileName, string Text) { PT.Errors = Errors; PT.CurrentFileName = FileName; Scanner scanner = new Scanner(); scanner.SetSource(Text, 0); GPPGParser parser = new GPPGParser(scanner); if (!parser.Parse()) if (Errors.Count == 0) PT.AddError("Неопознанная синтаксическая ошибка!", null); return parser.root; }
public override syntax_tree_node BuildTreeInExprMode(string FileName, string Text) { PT.Errors = Errors; PT.CurrentFileName = FileName; Scanner scanner = new Scanner(); // Добавление в начало текста символа с кодом 1. Используется для парсинга выражений с последующим использованием в Intellisense Text = String.Concat((char)1, Text); scanner.SetSource(Text, 0); GPPGParser parser = new GPPGParser(scanner); if (!parser.Parse()) if (Errors.Count == 0) PT.AddError("Не разобрали выражение", null); return parser.root; }
public override syntax_tree_node BuildTreeInExprMode(string FileName, string Text) { PT.Errors = Errors; PT.CurrentFileName = FileName; Scanner scanner = new Scanner(); Text = String.Concat((char)1, Text); scanner.SetSource(Text, 0); GPPGParser parser = new GPPGParser(scanner); parser._units.Add(new GPPGParser.unit_data()); parser.unit_number++; if (!parser.Parse()) if (Errors.Count == 0) PT.AddError("Не разобрали выражение", null); return parser.root; }