コード例 #1
0
ファイル: SpecFileAndListener.cs プロジェクト: kaby76/Piggy
        public override void EnterUsing(SpecParserParser.UsingContext context)
        {
            // When including another spec file, build a tree from the spec file
            // and insert it here.
            var c    = context.GetChild(1);
            var text = c.GetText();

            text = text.Replace("'", "");
            if (_seen_usings.Contains(text))
            {
                return;
            }
            _seen_usings.Add(text);
            var file = new SpecFileAndListener(_program);

            file.ParseSpecFile(text);
        }
コード例 #2
0
ファイル: Piggy.cs プロジェクト: kaby76/Piggy
        public void RunTool(string ast_file, string spec_file, bool keep_file, string expression,
                            string template_directory, string output_file, bool debug_information)
        {
            _ast_file           = ast_file;
            _keep_file          = keep_file;
            _debug_information  = debug_information;
            _expression         = expression;
            _spec_file          = spec_file;
            _template_directory = template_directory;
            _output_file_name   = output_file;
            Tool.OutputLocation = output_file;
            if (_output_file_name != null)
            {
                var is_file      = File.Exists(_output_file_name);
                var is_directory = Directory.Exists(_output_file_name);
                if (is_file)
                {
                    Tool.Redirect = new Redirect(_output_file_name);
                }
            }

            string ast_string = null;

            if (ast_file == null || ast_file == "")
            {
                var    s = new List <string>();
                string input;
                while ((input = Console.ReadLine()) != null)
                {
                    s.Add(input);
                }
                ast_string = string.Join("\r\n", s);
            }
            else
            {
                ast_string = File.ReadAllText(ast_file);
            }

            var the_reconstructed_tree = C.Deserialize.ReconstructTree(new CPP14Parser(null), new CPP14Lexer(null), ast_string);

            var          ast_stream = CharStreams.fromstring(ast_string);
            ITokenSource ast_lexer  = new AstLexer(ast_stream);
            var          ast_tokens = new CommonTokenStream(ast_lexer);
            var          ast_parser = new AstParserParser(ast_tokens);

            ast_parser.BuildParseTree = true;
            var listener = new ErrorListener <IToken>();

            ast_parser.AddErrorListener(listener);
            IParseTree ast_tree = ast_parser.ast();

            if (listener.had_error)
            {
                throw new Exception();
            }
            _ast = ast_tree;
            _common_token_stream = ast_tokens;
            if (spec_file == null && expression != null)
            {
                var exp = new SpecFileAndListener(this);
                exp.ParseExpressionPattern(expression);
                var output_engine = new OutputEngine(this);
                output_engine.Run(true);
            }
            else if (spec_file != null)
            {
                var full_path =
                    System.IO.Path.GetDirectoryName(System.IO.Path.GetFullPath(typeof(Piggy).Assembly.Location))
                    + System.IO.Path.DirectorySeparatorChar;
                var file = new SpecFileAndListener(this);
                file.ParseSpecFile(_spec_file);
                var output_engine = new OutputEngine(this);
                output_engine.Run(false);
            }
        }