Example #1
0
        public void ParseSpecFile(string specification_file_name)
        {
            var listener = new ErrorListener <IToken>();
            // Try current location, or template directory.
            var location = specification_file_name;

            if (!File.Exists(location))
            {
                location = Piggy._template_directory + "\\" +
                           specification_file_name;
                if (!File.Exists(location))
                {
                    Console.WriteLine("File " + specification_file_name + " does not exist.");
                    throw new Exception();
                }
            }

            var          stream = CharStreams.fromPath(location);
            ITokenSource lexer  = new SpecLexer(stream);
            ITokenStream tokens = new CommonTokenStream(lexer);
            var          parser = new SpecParserParser(tokens);

            parser.BuildParseTree = true;
            parser.AddErrorListener(listener);
            var spec_ast = parser.spec();

            if (listener.had_error)
            {
                Console.WriteLine(spec_ast.GetText());
                throw new Exception();
            }

            ParseTreeWalker.Default.Walk(this, spec_ast);
        }
Example #2
0
        public void ParseExpressionPattern(string expression)
        {
            var          listener = new ErrorListener <IToken>();
            var          stream   = CharStreams.fromstring(expression);
            ITokenSource lexer    = new SpecLexer(stream);
            ITokenStream tokens   = new CommonTokenStream(lexer);
            var          parser   = new SpecParserParser(tokens);

            parser.BuildParseTree = true;
            parser.AddErrorListener(listener);
            var spec_ast = parser.pattern();

            if (listener.had_error)
            {
                Console.WriteLine(spec_ast.GetText());
                throw new Exception();
            }

            var template = new Template();

            _current_template     = template;
            template.TemplateName = "Grep";
            _program._templates.Add(template);
            _current_pass       = new Pass();
            _current_pass.Name  = "Grep";
            _current_pass.Owner = _current_template;
            _current_template.Passes.Add(_current_pass);
            _program._application.OrderedPasses.Add("Grep.Grep");
            ParseTreeWalker.Default.Walk(this, spec_ast);
        }