Search in sources :

Example 1 with GroovyRecognizer

use of org.codehaus.groovy.antlr.parser.GroovyRecognizer in project groovy by apache.

the class GenericsUtils method parseClassNodesFromString.

public static ClassNode[] parseClassNodesFromString(final String option, final SourceUnit sourceUnit, final CompilationUnit compilationUnit, final MethodNode mn, final ASTNode usage) {
    GroovyLexer lexer = new GroovyLexer(new StringReader("DummyNode<" + option + ">"));
    final GroovyRecognizer rn = GroovyRecognizer.make(lexer);
    try {
        rn.classOrInterfaceType(true);
        final AtomicReference<ClassNode> ref = new AtomicReference<ClassNode>();
        AntlrParserPlugin plugin = new AntlrParserPlugin() {

            @Override
            public ModuleNode buildAST(final SourceUnit sourceUnit, final ClassLoader classLoader, final Reduction cst) throws ParserException {
                ref.set(makeTypeWithArguments(rn.getAST()));
                return null;
            }
        };
        plugin.buildAST(null, null, null);
        ClassNode parsedNode = ref.get();
        // the returned node is DummyNode<Param1, Param2, Param3, ...)
        GenericsType[] parsedNodeGenericsTypes = parsedNode.getGenericsTypes();
        if (parsedNodeGenericsTypes == null) {
            return null;
        }
        ClassNode[] signature = new ClassNode[parsedNodeGenericsTypes.length];
        for (int i = 0; i < parsedNodeGenericsTypes.length; i++) {
            final GenericsType genericsType = parsedNodeGenericsTypes[i];
            signature[i] = resolveClassNode(sourceUnit, compilationUnit, mn, usage, genericsType.getType());
        }
        return signature;
    } catch (RecognitionException e) {
        sourceUnit.addError(new IncorrectTypeHintException(mn, e, usage.getLineNumber(), usage.getColumnNumber()));
    } catch (TokenStreamException e) {
        sourceUnit.addError(new IncorrectTypeHintException(mn, e, usage.getLineNumber(), usage.getColumnNumber()));
    } catch (ParserException e) {
        sourceUnit.addError(new IncorrectTypeHintException(mn, e, usage.getLineNumber(), usage.getColumnNumber()));
    }
    return null;
}
Also used : ClassNode(org.codehaus.groovy.ast.ClassNode) ParserException(org.codehaus.groovy.syntax.ParserException) IncorrectTypeHintException(groovy.transform.stc.IncorrectTypeHintException) AtomicReference(java.util.concurrent.atomic.AtomicReference) SourceUnit(org.codehaus.groovy.control.SourceUnit) TokenStreamException(antlr.TokenStreamException) Reduction(org.codehaus.groovy.syntax.Reduction) AntlrParserPlugin(org.codehaus.groovy.antlr.AntlrParserPlugin) GroovyLexer(org.codehaus.groovy.antlr.parser.GroovyLexer) StringReader(java.io.StringReader) GenericsType(org.codehaus.groovy.ast.GenericsType) GroovyRecognizer(org.codehaus.groovy.antlr.parser.GroovyRecognizer) RecognitionException(antlr.RecognitionException)

Example 2 with GroovyRecognizer

use of org.codehaus.groovy.antlr.parser.GroovyRecognizer in project groovy by apache.

the class Main method parseFile.

// Here's where we do the real work...
public static void parseFile(String f, GroovyLexer l, SourceBuffer sourceBuffer) throws Exception {
    try {
        // Create a parser that reads from the scanner
        GroovyRecognizer parser = GroovyRecognizer.make(l);
        parser.setSourceBuffer(sourceBuffer);
        parser.setFilename(f);
        if (whitespaceIncluded) {
            GroovyLexer lexer = parser.getLexer();
            lexer.setWhitespaceIncluded(true);
            while (true) {
                Token t = lexer.nextToken();
                System.out.println(t);
                if (t == null || t.getType() == Token.EOF_TYPE)
                    break;
            }
            return;
        }
        // start parsing at the compilationUnit rule
        parser.compilationUnit();
        System.out.println("parseFile " + f + " => " + parser.getAST());
        // do something with the tree
        doTreeAction(f, parser.getAST(), parser.getTokenNames());
    } catch (Exception e) {
        System.err.println("parser exception: " + e);
        // so we can get stack trace        
        e.printStackTrace();
    }
}
Also used : GroovyLexer(org.codehaus.groovy.antlr.parser.GroovyLexer) Token(antlr.Token) GroovyRecognizer(org.codehaus.groovy.antlr.parser.GroovyRecognizer)

Example 3 with GroovyRecognizer

use of org.codehaus.groovy.antlr.parser.GroovyRecognizer in project groovy by apache.

the class SourceParserTest method parse.

protected void parse(String name, Reader reader) {
    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);
    parser.setFilename(name);
    // start parsing at the compilationUnit rule
    try {
        parser.compilationUnit();
    } catch (Exception ex) {
        StringWriter out = new StringWriter();
        out.write(ex.getMessage());
        out.write("\n");
        ex.printStackTrace(new PrintWriter(out));
        fail(out.toString());
    }
}
Also used : StringWriter(java.io.StringWriter) GroovyLexer(org.codehaus.groovy.antlr.parser.GroovyLexer) GroovyRecognizer(org.codehaus.groovy.antlr.parser.GroovyRecognizer) PrintWriter(java.io.PrintWriter)

Example 4 with GroovyRecognizer

use of org.codehaus.groovy.antlr.parser.GroovyRecognizer in project groovy by apache.

the class LineColumnTest method doStuff.

public void doStuff(String input) throws Exception {
    GroovyRecognizer parser;
    SourceBuffer sourceBuffer = new SourceBuffer();
    UnicodeEscapingReader unicodeReader = new UnicodeEscapingReader(new StringReader(input), sourceBuffer);
    GroovyLexer lexer = new GroovyLexer(unicodeReader);
    unicodeReader.setLexer(lexer);
    parser = GroovyRecognizer.make(lexer);
    parser.setSourceBuffer(sourceBuffer);
    String[] tokenNames = parser.getTokenNames();
    parser.compilationUnit();
    AST ast = parser.getAST();
    AntlrASTProcessor snippets = new AntlrASTProcessSnippets();
    ast = snippets.process(ast);
    Visitor visitor = new LineColumnChecker(sourceBuffer, tokenNames);
    AntlrASTProcessor traverser = new SourceCodeTraversal(visitor);
    traverser.process(ast);
}
Also used : AST(antlr.collections.AST) SourceBuffer(org.codehaus.groovy.antlr.SourceBuffer) AntlrASTProcessor(org.codehaus.groovy.antlr.AntlrASTProcessor) UnicodeEscapingReader(org.codehaus.groovy.antlr.UnicodeEscapingReader) GroovyLexer(org.codehaus.groovy.antlr.parser.GroovyLexer) AntlrASTProcessSnippets(org.codehaus.groovy.antlr.AntlrASTProcessSnippets) StringReader(java.io.StringReader) GroovyRecognizer(org.codehaus.groovy.antlr.parser.GroovyRecognizer)

Example 5 with GroovyRecognizer

use of org.codehaus.groovy.antlr.parser.GroovyRecognizer in project groovy by apache.

the class ClassicGroovyTestGeneratorHelper method parse.

/** run the JSR parser implementation over the supplied source text*/
public void parse(String theSrcText, String testName) throws Exception {
    System.out.println("-------------------------------");
    System.out.println("  " + testName);
    System.out.println("-------------------------------");
    try {
        Reader reader = new BufferedReader(new StringReader(theSrcText));
        GroovyRecognizer recognizer = GroovyRecognizer.make(reader);
        recognizer.compilationUnit();
        System.out.println(decorateWithLineNumbers(theSrcText));
    } catch (RecognitionException parseException) {
        System.out.println(decorateWithLineNumbersAndErrorMessage(theSrcText, parseException));
        throw parseException;
    }
    System.out.println("-------------------------------");
}
Also used : BufferedReader(java.io.BufferedReader) StringReader(java.io.StringReader) StringReader(java.io.StringReader) Reader(java.io.Reader) BufferedReader(java.io.BufferedReader) GroovyRecognizer(org.codehaus.groovy.antlr.parser.GroovyRecognizer) RecognitionException(antlr.RecognitionException)

Aggregations

GroovyRecognizer (org.codehaus.groovy.antlr.parser.GroovyRecognizer)22 GroovyLexer (org.codehaus.groovy.antlr.parser.GroovyLexer)18 StringReader (java.io.StringReader)14 SourceBuffer (org.codehaus.groovy.antlr.SourceBuffer)10 UnicodeEscapingReader (org.codehaus.groovy.antlr.UnicodeEscapingReader)10 AST (antlr.collections.AST)8 AntlrASTProcessor (org.codehaus.groovy.antlr.AntlrASTProcessor)8 RecognitionException (antlr.RecognitionException)6 TokenStreamException (antlr.TokenStreamException)4 ByteArrayOutputStream (java.io.ByteArrayOutputStream)4 PrintStream (java.io.PrintStream)4 Token (antlr.Token)2 TokenStreamRecognitionException (antlr.TokenStreamRecognitionException)2 IncorrectTypeHintException (groovy.transform.stc.IncorrectTypeHintException)2 BufferedReader (java.io.BufferedReader)2 PrintWriter (java.io.PrintWriter)2 Reader (java.io.Reader)2 StringWriter (java.io.StringWriter)2 Constructor (java.lang.reflect.Constructor)2 ArrayList (java.util.ArrayList)2