コード例 #1
0
ファイル: TypeSqlCompiler.cs プロジェクト: benpriebe/TypeSql
        public static CompileResult Compile(string typeSql, string typeSqlFileName)
        {
            //create the antlr-based lexer and parser
            var lexer = new TypeSqlLexer(new ANTLRStringStream(typeSql));
             var rewriteTokenStream = new TokenRewriteStream(lexer);
            var parser = new TypeSqlParser(rewriteTokenStream);

            //parse the typeSql, producing the AST
            var ast = (CommonTree) parser.typesql().Tree;
             var nodeStream = new CommonTreeNodeStream(ast);

            //transform the AST into raw-sql
             var rawSqlOutput = new RawSqlTransform(nodeStream);
             nodeStream.TokenStream = rewriteTokenStream;
             rawSqlOutput.typeSql();
             string rawSql = rewriteTokenStream.ToString();

            //reset
             lexer.Reset();
             rewriteTokenStream.Reset();
             nodeStream.Reset();
            //and transform the AST into DAO source code
             var daoTransform = new DaoTransform(nodeStream){TemplateGroup = new StringTemplateGroup(
                new StreamReader(typeof(TypeSqlCompiler).Assembly.GetManifestResourceStream("TypeSql.Parsing.DapperDao.stg")),
                typeof (TemplateLexer))};
             var template = daoTransform.typeSql(typeSqlFileName, rawSql).Template;
             string daoSourceCode = template.ToString();

            return new CompileResult(daoSourceCode, rawSql);
        }
コード例 #2
0
        public void Load(string path)
        {
            var tokens = new CommonTokenStream(GetLexer(path));
            var parser = new JavaParser(tokens);

            parser.enableErrorMessageCollection(true);
            var tree  = parser.JavaSource().Tree;
            var nodes = new CommonTreeNodeStream(tree);
            var xs    = new JavaTreeParser(nodes);

            xs.enableErrorMessageCollection(true);
            var rootNode = xs.JavaSource();

            if (!parser.hasErrors() && !xs.hasErrors())
            {
            }
            else
            {
                foreach (var message in parser.getMessages())
                {
                    Console.WriteLine(message);
                }
                foreach (var message in xs.getMessages())
                {
                    Console.WriteLine(message);
                }
                throw new NotImplementedException();
            }
        }
コード例 #3
0
ファイル: Compiler.cs プロジェクト: mff-uk/exolutio
        public OclCompilerResult CompileEvolutionScript(string text, Bridge.IBridgeToOCL bridge)
        {
            TypesTable.TypesTable tt      = bridge.TypesTable;
            ErrorCollection       errColl = new ErrorCollection();

            // lexer
            ANTLRStringStream stringStream = new ANTLRStringStream(text);
            OCLSyntaxLexer    lexer        = new OCLSyntaxLexer(stringStream, errColl);

            // syntax
            CommonTokenStream tokenStream = new CommonTokenStream(lexer);
            OCLSyntaxParser   parser      = new OCLSyntaxParser(tokenStream, errColl);
            var output = parser.evolutionDeclarationList();

            // semantic
            Antlr.Runtime.Tree.CommonTreeNodeStream treeStream = new CommonTreeNodeStream(output.Tree);
            OCLAst semantic = new OCLAst(treeStream, errColl);

            semantic.TypesTable = tt;
            semantic.Bridge     = bridge;
            semantic.EnvironmentStack.Push(new NamespaceEnvironment(tt.Library.RootNamespace));
            AST.Constraints             constraints;
            AST.PropertyInitializations initializations;
            // try {
            OCLAst.evolutionDeclarationList_return evolutionDeclarationListReturn = semantic.evolutionDeclarationList();
            constraints     = evolutionDeclarationListReturn.Constraints;
            initializations = evolutionDeclarationListReturn.PropertyInitializations;
            // }
            //catch{
            //     constraints = new AST.Constraints();
            //    errColl.AddError(new ErrorItem("Fatal error."));
            // }

            return(new OclCompilerResult(constraints, initializations, errColl, tt.Library, bridge));
        }
コード例 #4
0
ファイル: Compiler.cs プロジェクト: mff-uk/exolutio
        /// <summary>
        /// Compile stand-alone expression.
        /// </summary>
        /// <example>
        /// Example shows how to parse stand-alone invariant.
        /// <code>
        /// <![CDATA[
        /// // ...
        /// Environment nsEnv = new NamespaceEnvironment(tt.Library.RootNamespace);
        /// VariableDeclaration varSelf = new VariableDeclaration(selfName, contextClassifier, null);
        /// Environment classifierEnv = nsEnv.CreateFromClassifier(contextClassifier, varSelf);
        /// Environment selfEnv = Environment.AddElement(selfName, contextClassifier, varSelf, true);
        ///
        /// Compiler.Compiler compiler = new Compiler.Compiler();
        /// var result = compiler.CompileStandAloneExpression(expressionText, tt, selfEnv);
        /// ]]>
        /// </code>
        /// </example>
        public ExpressionCompilerResult CompileStandAloneExpression(string text, TypesTable.TypesTable tt, Environment env)
        {
            ErrorCollection errColl = new ErrorCollection();

            // lexer
            ANTLRStringStream stringStream = new ANTLRStringStream(text);
            OCLSyntaxLexer    lexer        = new OCLSyntaxLexer(stringStream, errColl);

            // syntax
            CommonTokenStream tokenStream = new CommonTokenStream(lexer);
            OCLSyntaxParser   parser      = new OCLSyntaxParser(tokenStream, errColl);
            var output = parser.oclExpression();

            // semantic
            Antlr.Runtime.Tree.CommonTreeNodeStream treeStream = new CommonTreeNodeStream(output.Tree);
            OCLAst semantic = new OCLAst(treeStream, errColl);

            semantic.TypesTable = tt;
            semantic.EnvironmentStack.Push(env);
            AST.OclExpression expression;
            // try {
            expression = semantic.oclExpression();
            // }
            //catch{
            //     constraints = new AST.Constraints();
            //    errColl.AddError(new ErrorItem("Fatal error."));
            // }

            return(new ExpressionCompilerResult(expression, errColl, tt.Library));
        }
コード例 #5
0
        public static JsonArray Parse(string s)
        {
            var inputStream = new ANTLRStringStream(s);
            var lexer       = new JsonLexer(inputStream);
            var tokens      = new CommonTokenStream(lexer);
            var parser      = new JsonParser(tokens);
            var parseTree   = parser.array().Tree;
            var stream      = new CommonTreeNodeStream(parseTree);
            var tree        = new JsonTree(stream);

            var @object = tree.array();

            Contract.Assume(@object != null);
            return(new JsonArray(JsonValueTypes.Interpret(@object)));
        }
コード例 #6
0
ファイル: TreeFilter.cs プロジェクト: sklose/NCalc2
        public virtual void ApplyOnce( object t, System.Action whichRule )
        {
            if ( t == null )
                return;

            try
            {
                // share TreeParser object but not parsing-related state
                state = new RecognizerSharedState();
                input = new CommonTreeNodeStream( originalAdaptor, t );
                ( (CommonTreeNodeStream)input ).TokenStream = originalTokenStream;
                BacktrackingLevel = 1;
                whichRule();
                BacktrackingLevel = 0;
            }
            catch ( RecognitionException )
            {
            }
        }
コード例 #7
0
ファイル: Main.cs プロジェクト: FallenGameR/AntlrAutomation
        public static void Main(string[] args)
        {
            ICharStream input;
            if ( args.Length>0 ) {
            input = new ANTLRFileStream(args[0]);
            }
            else {
            input = new ANTLRReaderStream(Console.In);
            }

            // BUILD AST
            PolyLexer lex = new PolyLexer(input);
            CommonTokenStream tokens = new CommonTokenStream(lex);
            PolyParser parser = new PolyParser(tokens);
            PolyParser.poly_return r = parser.poly();
            Console.Out.WriteLine("tree="+((ITree)r.Tree).ToStringTree());

            // DIFFERENTIATE
               	CommonTreeNodeStream nodes = new CommonTreeNodeStream(r.Tree);
            nodes.TokenStream = tokens;
            PolyDifferentiator differ = new PolyDifferentiator(nodes);
            PolyDifferentiator.poly_return r2 = differ.poly();
            Console.Out.WriteLine("d/dx="+((ITree) r2.Tree).ToStringTree());

            // SIMPLIFY / NORMALIZE
               	nodes = new CommonTreeNodeStream(r2.Tree);
            nodes.TokenStream = tokens;
            Simplifier reducer = new Simplifier(nodes);
            Simplifier.poly_return r3 = reducer.poly();
            Console.Out.WriteLine("simplified="+((ITree) r3.Tree).ToStringTree());

            // CONVERT BACK TO POLYNOMIAL
               	nodes = new CommonTreeNodeStream(r3.Tree);
            nodes.TokenStream = tokens;
            PolyPrinter printer = new PolyPrinter(nodes);
            PolyPrinter.poly_return r4 = printer.poly();
            Console.Out.WriteLine(r4.ST);
        }