public expression ParseExpression(string Text, int line, int col)
        {
            PT parsertools = new PT(); // контекст сканера и парсера

            parsertools.errors          = new List <Error>();
            parsertools.warnings        = new List <CompilerWarning>();
            parsertools.CurrentFileName = System.IO.Path.GetFullPath(this.parsertools.CurrentFileName);
            parsertools.build_tree_for_format_strings = true;
            Scanner scanner = new Scanner();

            scanner.SetSource("<<expression>>" + Text, 0);
            scanner.parsertools = parsertools;// передали parsertools в объект сканера
            GPPGParser parser = new GPPGParser(scanner);

            parsertools.build_tree_for_formatter = false;
            parser.lambdaHelper = this.lambdaHelper;
            parser.parsertools  = parsertools;
            if (!parser.Parse())
            {
                if (parsertools.errors.Count == 0)
                {
                    parsertools.AddError("Неопознанная синтаксическая ошибка!", null);
                }
            }
            foreach (Error err in parsertools.errors)
            {
                this.parsertools.errors.Add(err);
            }
            return(parser.root as expression);
        }
Beispiel #2
0
        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;
        }
Beispiel #3
0
        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;
        }
Beispiel #4
0
        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;
        }
Beispiel #5
0
        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;
        }