亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? antlrparserplugin.java

?? Groovy動(dòng)態(tài)語(yǔ)言 運(yùn)行在JVM中的動(dòng)態(tài)語(yǔ)言 可以方便的處理業(yè)務(wù)邏輯變化大的業(yè)務(wù)
?? JAVA
?? 第 1 頁(yè) / 共 5 頁(yè)
字號(hào):
/**
 *
 * Copyright 2004 James Strachan
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 **/
package org.codehaus.groovy.antlr;

import antlr.RecognitionException;
import antlr.TokenStreamException;
import antlr.TokenStreamRecognitionException;
import antlr.collections.AST;
import com.thoughtworks.xstream.XStream;

import org.codehaus.groovy.GroovyBugError;
import org.codehaus.groovy.antlr.parser.GroovyLexer;
import org.codehaus.groovy.antlr.parser.GroovyRecognizer;
import org.codehaus.groovy.antlr.parser.GroovyTokenTypes;
import org.codehaus.groovy.antlr.treewalker.*;
import org.codehaus.groovy.ast.*;
import org.codehaus.groovy.ast.expr.*;
import org.codehaus.groovy.ast.stmt.*;
import org.codehaus.groovy.control.CompilationFailedException;
import org.codehaus.groovy.control.ParserPlugin;
import org.codehaus.groovy.control.SourceUnit;
import org.codehaus.groovy.syntax.*;
import org.objectweb.asm.Opcodes;

import java.io.*;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * A parser plugin which adapts the JSR Antlr Parser to the Groovy runtime
 *
 * @author <a href="mailto:jstrachan@protique.com">James Strachan</a>
 * @version $Revision: 4526 $
 */
public class AntlrParserPlugin extends ASTHelper implements ParserPlugin, GroovyTokenTypes {

    private AST ast;
    private ClassNode classNode;
    private String[] tokenNames;


    public Reduction parseCST(final SourceUnit sourceUnit, Reader reader) throws CompilationFailedException {
        ast = null;

        setController(sourceUnit);

        SourceBuffer sourceBuffer = new SourceBuffer();
        UnicodeEscapingReader unicodeReader = new UnicodeEscapingReader(reader,sourceBuffer);
        GroovyLexer lexer = new GroovyLexer(unicodeReader);
        unicodeReader.setLexer(lexer);
        GroovyRecognizer parser = GroovyRecognizer.make(lexer);
        parser.setSourceBuffer(sourceBuffer);
        tokenNames = parser.getTokenNames();
        parser.setFilename(sourceUnit.getName());

        // start parsing at the compilationUnit rule
        try {
            parser.compilationUnit();
        }
        catch (TokenStreamRecognitionException tsre) {
            RecognitionException e = tsre.recog;
            SyntaxException se = new SyntaxException(e.getMessage(),e,e.getLine(),e.getColumn());
            se.setFatal(true);
            sourceUnit.addError(se);
        }
        catch (RecognitionException e) {
            SyntaxException se = new SyntaxException(e.getMessage(),e,e.getLine(),e.getColumn());
            se.setFatal(true);
            sourceUnit.addError(se);
        }
        catch (TokenStreamException e) {
            sourceUnit.addException(e);
        }

        ast = parser.getAST();

        AntlrASTProcessor snippets = new AntlrASTProcessSnippets(sourceBuffer);
        ast = snippets.process(ast);
        
        AccessController.doPrivileged(new PrivilegedAction() {
            public Object run() {
            	outputASTInVariousFormsIfNeeded(sourceUnit);
                return null;
            }
        });
        
        return null; //new Reduction(Tpken.EOF);
    }

    public SourceSummary getSummary() {
        SummaryCollector summaryCollector = new SummaryCollector();
        AntlrASTProcessor treewalker = new PreOrderTraversal(summaryCollector);
        treewalker.process(ast);
        return summaryCollector.getSourceSummary();
    }

    private void outputASTInVariousFormsIfNeeded(SourceUnit sourceUnit) {
        // straight xstream output of AST
        if ("xml".equals(System.getProperty("antlr.ast"))) {
            saveAsXML(sourceUnit.getName(), ast);
        }

        // 'pretty printer' output of AST
        if ("groovy".equals(System.getProperty("antlr.ast"))) {
            try {
                PrintStream out = new PrintStream(new FileOutputStream(sourceUnit.getName() + ".pretty.groovy"));
                Visitor visitor = new SourcePrinter(out,tokenNames);
                AntlrASTProcessor treewalker = new SourceCodeTraversal(visitor);
                treewalker.process(ast);
            } catch (FileNotFoundException e) {
                System.out.println("Cannot create " + sourceUnit.getName() + ".pretty.groovy");
            }
        }

        // output AST in format suitable for opening in http://freemind.sourceforge.net
        // which is a really nice way of seeing the AST, folding nodes etc
        if ("mindmap".equals(System.getProperty("antlr.ast"))) {
            try {
                PrintStream out = new PrintStream(new FileOutputStream(sourceUnit.getName() + ".mm"));
                Visitor visitor = new MindMapPrinter(out,tokenNames);
                AntlrASTProcessor treewalker = new PreOrderTraversal(visitor);
                treewalker.process(ast);
            } catch (FileNotFoundException e) {
                System.out.println("Cannot create " + sourceUnit.getName() + ".mm");
            }
        }

        // html output of AST
        if ("html".equals(System.getProperty("antlr.ast"))) {
            try {
                PrintStream out = new PrintStream(new FileOutputStream(sourceUnit.getName() + ".html"));
                List v = new ArrayList();
                v.add(new NodeAsHTMLPrinter(out,tokenNames));
                v.add(new SourcePrinter(out,tokenNames));
                Visitor visitors = new CompositeVisitor(v);
                AntlrASTProcessor treewalker = new SourceCodeTraversal(visitors);
                treewalker.process(ast);
            } catch (FileNotFoundException e) {
                System.out.println("Cannot create " + sourceUnit.getName() + ".html");
            }
        }


    }

    private void saveAsXML(String name, AST ast) {
        XStream xstream = new XStream();
        try {
            xstream.toXML(ast, new FileWriter(name + ".antlr.xml"));
            System.out.println("Written AST to " + name + ".antlr.xml");
        }
        catch (Exception e) {
            System.out.println("Couldn't write to " + name + ".antlr.xml");
            e.printStackTrace();
        }
    }

    public ModuleNode buildAST(SourceUnit sourceUnit, ClassLoader classLoader, Reduction cst) throws ParserException {
        setClassLoader(classLoader);
        makeModule();
        try {
            convertGroovy(ast);
        }
        catch (ASTRuntimeException e) {
            throw new ASTParserException(e.getMessage() + ". File: " + sourceUnit.getName(), e);
        }
        return output;
    }

    /**
     * Converts the Antlr AST to the Groovy AST
     */
    protected void convertGroovy(AST node) {
        while (node != null) {
            int type = node.getType();
            switch (type) {
                case PACKAGE_DEF:
                    packageDef(node);
                    break;

                case IMPORT:
                    importDef(node);
                    break;

                case CLASS_DEF:
                    classDef(node);
                    break;

                case INTERFACE_DEF:
                    interfaceDef(node);
                    break;

                case METHOD_DEF:
                    methodDef(node);
                    break;

                default:
                    {
                        Statement statement = statement(node);
                        output.addStatement(statement);
                    }
            }
            node = node.getNextSibling();
        }
    }

    // Top level control structures
    //-------------------------------------------------------------------------

    protected void packageDef(AST packageDef) {
        AST node = packageDef.getFirstChild();
        if (isType(ANNOTATIONS, node)) {
            node = node.getNextSibling();
        }
        String name = qualifiedName(node);
        setPackageName(name);
    }
    
    protected void importDef(AST importNode) {
        // TODO handle static imports

        AST node = importNode.getFirstChild();

        String alias = null;
        if (isType(LITERAL_as, node)) {
            //import is like "import Foo as Bar"
            node = node.getFirstChild();
            AST aliasNode = node.getNextSibling();
            alias = identifier(aliasNode);
        }

        if (node.getNumberOfChildren()==0) {
            // import is like  "import Foo"
            String name = identifier(node);
            ClassNode type = ClassHelper.make(name);
            configureAST(type,importNode);
            importClass(type,name,alias);
            return;
        }

        AST packageNode = node.getFirstChild();
        String packageName = qualifiedName(packageNode);
        AST nameNode = packageNode.getNextSibling();
        if (isType(STAR, nameNode)) {
            // import is like "import foo.*"
            importPackageWithStar(packageName);
            if (alias!=null) throw new GroovyBugError(
                    "imports like 'import foo.* as Bar' are not "+
                    "supported and should be caught by the grammar");
        } else {
            // import is like "import foo.Bar"
            String name = identifier(nameNode);
            ClassNode type = ClassHelper.make(packageName+"."+name);
            configureAST(type,importNode);
            importClass(type,name,alias);
        }
    }

    protected void interfaceDef(AST classDef) {
        List annotations = new ArrayList();
        AST node = classDef.getFirstChild();
        int modifiers = Opcodes.ACC_PUBLIC;
        if (isType(MODIFIERS, node)) {
            modifiers = modifiers(node, annotations, modifiers);
            node = node.getNextSibling();
        }
        modifiers |= Opcodes.ACC_ABSTRACT | Opcodes.ACC_INTERFACE;

        String name = identifier(node);
        node = node.getNextSibling();
        ClassNode superClass = ClassHelper.OBJECT_TYPE;

        ClassNode[] interfaces = {};
        if (isType(EXTENDS_CLAUSE, node)) {
            interfaces = interfaces(node);
            node = node.getNextSibling();
        }

        addNewClassName(name);
        classNode = new ClassNode(dot(getPackageName(), name), modifiers, superClass, interfaces, null);
        classNode.addAnnotations(annotations);
        configureAST(classNode, classDef);

        assertNodeType(OBJBLOCK, node);
        objectBlock(node);
        output.addClass(classNode);
        classNode = null;
    }

    protected void classDef(AST classDef) {
        List annotations = new ArrayList();
        AST node = classDef.getFirstChild();
        int modifiers = Opcodes.ACC_PUBLIC;
        if (isType(MODIFIERS, node)) {
            modifiers = modifiers(node, annotations, modifiers);
            node = node.getNextSibling();
        }

        String name = identifier(node);
        node = node.getNextSibling();

        ClassNode superClass = null;
        if (isType(EXTENDS_CLAUSE, node)) {
            superClass = makeType(node);
            node = node.getNextSibling();
        }

        ClassNode[] interfaces = {};
        if (isType(IMPLEMENTS_CLAUSE, node)) {
            interfaces = interfaces(node);
            node = node.getNextSibling();
        }

        // TODO read mixins
        MixinNode[] mixins = {};

        addNewClassName(name);
        classNode = new ClassNode(dot(getPackageName(), name), modifiers, superClass, interfaces, mixins);
        classNode.addAnnotations(annotations);
        configureAST(classNode, classDef);

        assertNodeType(OBJBLOCK, node);
        objectBlock(node);
        output.addClass(classNode);
        classNode = null;
    }

    protected void objectBlock(AST objectBlock) {
        for (AST node = objectBlock.getFirstChild(); node != null; node = node.getNextSibling()) {
            int type = node.getType();
            switch (type) {
                case OBJBLOCK:
                    objectBlock(node);

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久疯狂做爰流白浆xx| 丝袜美腿亚洲综合| 欧美一区二区三级| 成人动漫视频在线| 久久se这里有精品| 亚洲午夜在线观看视频在线| 国产日韩高清在线| 日韩欧美一二区| 欧美做爰猛烈大尺度电影无法无天| 国产福利91精品一区| 风间由美中文字幕在线看视频国产欧美| 亚洲精品日韩专区silk| 久久久99久久| 精品999久久久| 日韩一区二区视频| 欧美日韩美女一区二区| 91麻豆精品在线观看| 国产盗摄女厕一区二区三区| 免费成人性网站| 亚洲成人精品一区| 一区二区三区在线视频免费观看| 中国av一区二区三区| 精品国产凹凸成av人网站| 日韩一区二区在线观看视频| 欧美裸体bbwbbwbbw| 在线观看亚洲成人| 色婷婷综合久久久久中文一区二区| 国产91对白在线观看九色| 韩国在线一区二区| 久久99国内精品| 久久精品二区亚洲w码| 日产精品久久久久久久性色| 亚洲国产精品影院| 亚洲精品免费看| 一区二区三区在线观看欧美| 亚洲美女少妇撒尿| 一区二区三区在线视频免费观看| 亚洲欧美成aⅴ人在线观看| 综合久久久久综合| 亚洲欧美日韩中文播放| 亚洲女爱视频在线| 一区二区欧美国产| 亚洲成av人片在线观看| 日日夜夜精品视频天天综合网| 天天亚洲美女在线视频| 日韩国产成人精品| 久久 天天综合| 国产乱子伦一区二区三区国色天香| 久久精品国产澳门| 国内成人精品2018免费看| 国产一区二区成人久久免费影院| 国产精品亚洲专一区二区三区| 成人午夜av电影| 91视频你懂的| 欧美夫妻性生活| 久久尤物电影视频在线观看| 国产欧美日韩另类视频免费观看| 国产精品入口麻豆原神| 亚洲老妇xxxxxx| 水野朝阳av一区二区三区| 久久精品国产一区二区三| 国产一区二区按摩在线观看| 成人动漫av在线| 欧美三级午夜理伦三级中视频| 91麻豆精品91久久久久久清纯 | 亚洲伦理在线精品| 亚洲国产成人tv| 狠狠色综合日日| 成年人网站91| 欧美理论片在线| 久久精品水蜜桃av综合天堂| 亚洲视频一区二区在线| 秋霞电影网一区二区| 国产98色在线|日韩| 欧美性色黄大片| 精品区一区二区| 亚洲欧美日韩中文播放| 美女国产一区二区| 99久久99久久精品国产片果冻| 欧美女孩性生活视频| 久久精品亚洲精品国产欧美 | 91视频在线观看免费| 欧美男人的天堂一二区| 国产日韩欧美不卡| 日韩精品视频网站| 国产iv一区二区三区| 欧美日韩国产综合一区二区 | 亚洲一区二区三区影院| 激情欧美一区二区| 欧美伊人精品成人久久综合97| 久久综合色鬼综合色| 亚洲专区一二三| 高清免费成人av| 日韩一区二区在线免费观看| 亚洲另类春色国产| 国产精品一线二线三线| 欧美浪妇xxxx高跟鞋交| 国产精品精品国产色婷婷| 免费xxxx性欧美18vr| 一本大道av伊人久久综合| 久久看人人爽人人| 日韩成人午夜电影| 色老头久久综合| 中文字幕欧美三区| 久久精品免费看| 欧美二区三区的天堂| 亚洲人123区| 成人av在线网| 久久精品在这里| 久久99久久久欧美国产| 欧美另类videos死尸| 一区二区久久久| 91美女片黄在线观看| 中文幕一区二区三区久久蜜桃| 九九九久久久精品| 69久久99精品久久久久婷婷| 亚洲免费在线视频一区 二区| 国产福利精品导航| 久久婷婷国产综合精品青草 | 国产乱人伦偷精品视频不卡| 欧美一区二区三区四区视频| 亚洲v精品v日韩v欧美v专区| 欧美亚洲一区三区| 一级日本不卡的影视| 91麻豆国产福利在线观看| 国产精品国产三级国产普通话三级 | 综合久久久久久久| 不卡的电视剧免费网站有什么| 久久久久国产精品麻豆| 国产在线一区观看| 精品国产乱码久久久久久牛牛| 日本aⅴ免费视频一区二区三区 | 日韩欧美国产wwwww| 美国毛片一区二区| 日韩午夜电影在线观看| 美女看a上一区| wwwwxxxxx欧美| 国产99久久久国产精品| 国产欧美1区2区3区| 成人动漫在线一区| 亚洲手机成人高清视频| 在线免费不卡视频| 亚洲电影中文字幕在线观看| 欧美日本在线观看| 蜜臀va亚洲va欧美va天堂| 欧美一区二区三区免费视频 | 国产91精品久久久久久久网曝门| 久久精品人人做人人综合 | 26uuu精品一区二区| 国产剧情在线观看一区二区| 国产色综合久久| 91在线看国产| 亚洲国产裸拍裸体视频在线观看乱了| 欧美日韩高清影院| 精品一区二区日韩| 欧美国产精品专区| 在线中文字幕一区二区| 天天综合天天综合色| 精品国产免费人成在线观看| 福利电影一区二区| 亚洲一区二区三区国产| 欧美一级片在线看| 国产精品自在欧美一区| 日韩一区中文字幕| 欧美精品色一区二区三区| 精品一区二区三区在线观看| 中文字幕+乱码+中文字幕一区| 色老头久久综合| 久久激情五月婷婷| 亚洲特黄一级片| 日韩一区二区在线播放| www.亚洲国产| 日韩综合一区二区| 中文字幕精品一区二区三区精品| 色呦呦国产精品| 精久久久久久久久久久| 亚洲图片欧美激情| 日韩一二三四区| 99精品视频一区二区三区| 日韩精品每日更新| 亚洲国产精华液网站w| 欧美精品丝袜中出| 成人黄色软件下载| 日韩精品五月天| 自拍偷拍国产精品| 欧美v日韩v国产v| 在线精品视频一区二区三四| 国产真实乱偷精品视频免| 亚洲一区二区偷拍精品| 国产亚洲精品7777| 69久久夜色精品国产69蝌蚪网| 粉嫩蜜臀av国产精品网站| 亚洲成人综合网站| 国产精品国产自产拍在线| 精品奇米国产一区二区三区| 欧美在线啊v一区| 成人av网在线| 激情图区综合网| 亚洲第一二三四区| 亚洲视频免费在线|