java类org.antlr.v4.runtime.Parser的实例源码

RefactorUtils.java 文件源码 项目:intellij-plugin-v4 阅读 23 收藏 0 点赞 0 评论 0
public static List<TerminalNode> getAllRuleRefNodes(Parser parser, ParseTree tree, String ruleName) {
    List<TerminalNode> nodes = new ArrayList<TerminalNode>();
    Collection<ParseTree> ruleRefs;
    if ( Grammar.isTokenName(ruleName) ) {
        ruleRefs = XPath.findAll(tree, "//lexerRuleBlock//TOKEN_REF", parser);
    }
    else {
        ruleRefs = XPath.findAll(tree, "//ruleBlock//RULE_REF", parser);
    }
    for (ParseTree node : ruleRefs) {
        TerminalNode terminal = (TerminalNode)node;
        Token rrefToken = terminal.getSymbol();
        String r = rrefToken.getText();
        if ( r.equals(ruleName) ) {
            nodes.add(terminal);
        }
    }
    if ( nodes.size()==0 ) return null;
    return nodes;
}
AstBuilderListener.java 文件源码 项目:intellij-plugin-v4 阅读 19 收藏 0 点赞 0 评论 0
public AstBuilderListener(Language language, Parser parser, PsiBuilder builder) {
    this.language = language;
    this.builder = builder;

    this.tokenElementTypes = PSIElementTypeFactory.getTokenIElementTypes(language, Arrays.asList(parser.getTokenNames()));
    this.ruleElementTypes = PSIElementTypeFactory.getRuleIElementTypes(language, Arrays.asList(parser.getRuleNames()));

    for (ANTLRErrorListener listener : parser.getErrorListeners()) {
        if (listener instanceof SyntaxErrorListener) {
            syntaxErrors.addAll(((SyntaxErrorListener)listener).getSyntaxErrors());
        }
    }

    Collections.sort(syntaxErrors, new Comparator<SyntaxError>() {

        @Override
        public int compare(SyntaxError o1, SyntaxError o2) {
            return Integer.valueOf(getStart(o1)).compareTo(getStart(o2));
        }
    });
}
StatisticsParserATNSimulator.java 文件源码 项目:antlrworks2 阅读 22 收藏 0 点赞 0 评论 0
public StatisticsParserATNSimulator(Parser parser, ATN atn) {
    super(parser, atn);
    decisionInvocations = new long[atn.decisionToState.size()];
    decisionCost = new long[atn.decisionToState.size()];
    decisionLlCost = new long[atn.decisionToState.size()];
    fullContextFallback = new long[atn.decisionToState.size()];
    nonSll = new long[atn.decisionToState.size()];
    ambiguousResult = new long[atn.decisionToState.size()];
    totalTransitions = new long[atn.decisionToState.size()];
    computedTransitions = new long[atn.decisionToState.size()];
    fullContextTransitions = new long[atn.decisionToState.size()];
    totalLookaheadSll = new long[atn.decisionToState.size()];
    totalLookaheadLl = new long[atn.decisionToState.size()];
    minLookaheadSll = new long[atn.decisionToState.size()];
    maxLookaheadSll = new long[atn.decisionToState.size()];
    minLookaheadLl = new long[atn.decisionToState.size()];
    maxLookaheadLl = new long[atn.decisionToState.size()];
    for (int i = 0; i < minLookaheadSll.length; i++) {
        minLookaheadSll[i] = Long.MAX_VALUE;
        minLookaheadLl[i] = Long.MAX_VALUE;
        maxLookaheadSll[i] = Long.MIN_VALUE;
        maxLookaheadLl[i] = Long.MIN_VALUE;
    }
}
AbstractForestParser.java 文件源码 项目:antlrworks2 阅读 22 收藏 0 点赞 0 评论 0
@Override
public Map<RuleContext, CaretReachedException> getParseTrees(TParser parser) {
    List<MultipleDecisionData> potentialAlternatives = new ArrayList<>();
    IntegerList currentPath = new IntegerList();
    Map<RuleContext, CaretReachedException> results = new IdentityHashMap<>();
    // make sure the token stream is initialized before getting the index
    parser.getInputStream().LA(1);
    int initialToken = parser.getInputStream().index();
    while (true) {
        parser.getInputStream().seek(initialToken);
        tryParse(parser, potentialAlternatives, currentPath, results);
        if (!incrementCurrentPath(potentialAlternatives, currentPath)) {
            break;
        }
    }

    LOGGER.log(Level.FINE, "Forest parser constructed {0} parse trees.", results.size());

    if (LOGGER.isLoggable(Level.FINEST)) {
        for (Map.Entry<RuleContext, CaretReachedException> entry : results.entrySet()) {
            LOGGER.log(Level.FINEST, entry.getKey().toStringTree(parser instanceof Parser ? (Parser)parser : null));
        }
    }

    return results;
}
CodeCompletionErrorStrategy.java 文件源码 项目:antlrworks2 阅读 20 收藏 0 点赞 0 评论 0
@Override
    public void recover(Parser recognizer, RecognitionException e) {
        if (recognizer instanceof CodeCompletionParser
            && ((CodeCompletionParser)recognizer).getInterpreter().getCaretTransitions() != null) {

//                    int stateNumber = recognizer.getContext().s;
//                    ATNState state = recognizer.getATN().states.get(stateNumber);
//                    if (state instanceof DecisionState && recognizer.getInputStream() instanceof ObjectStream) {
//                        int decision = ((DecisionState)state).decision;
//                        ParserATNSimulator simulator = recognizer.getInterpreter();
//                        int prediction = simulator.adaptivePredict((ObjectStream)recognizer.getInputStream(), decision, recognizer.getContext());
//                    }

            CodeCompletionParser parser = (CodeCompletionParser)recognizer;
            CaretToken token = parser.getInterpreter().getCaretToken();
            AbstractCompletionParserATNSimulator interpreter = parser.getInterpreter();

            throw new CaretReachedException(parser.getContext(), token, interpreter.getCaretTransitions(), e);
        }

        // TODO: incorporate error recovery as a fallback option if no trees match correctly
        throw e;
        //super.recover(recognizer, e);
    }
BeetlAntlrErrorStrategy.java 文件源码 项目:beetl2.0 阅读 26 收藏 0 点赞 0 评论 0
/** Make sure we don't attempt to recover inline; if the parser
    * successfully recovers, it won't throw an exception.
    */
    @Override
    public Token recoverInline(Parser recognizer) throws RecognitionException
    {
        // SINGLE TOKEN DELETION
        Token matchedSymbol = singleTokenDeletion(recognizer);
        if (matchedSymbol != null)
        {
            // we have deleted the extra token.
            // now, move past ttype token as if all were ok
            recognizer.consume();
            return matchedSymbol;
        }

        // SINGLE TOKEN INSERTION
        if (singleTokenInsertion(recognizer))
        {
            return getMissingSymbol(recognizer);
        }

//      BeetlException exception = new BeetlParserException(BeetlException.PARSER_MISS_ERROR);
//      exception.pushToken(this.getGrammarToken(recognizer.getCurrentToken()));
//      throw exception;
        throw new InputMismatchException(recognizer);
    }
BeetlAntlrErrorStrategy.java 文件源码 项目:beetl2.0 阅读 32 收藏 0 点赞 0 评论 0
protected void reportUnwantedToken(@NotNull Parser recognizer)
{
    if (inErrorRecoveryMode(recognizer))
    {
        return;
    }

    beginErrorCondition(recognizer);

    Token t = recognizer.getCurrentToken();
    String tokenName = getTokenErrorDisplay(t);
    IntervalSet expecting = getExpectedTokens(recognizer);
    String msg = "多余输入 " + tokenName + " 期望 " + expecting.toString(recognizer.getTokenNames());
    BeetlException exception = new BeetlParserException(BeetlException.PARSER_MISS_ERROR, msg);
    //      exception.token = this.getGrammarToken(t);
    exception.pushToken(this.getGrammarToken(t));
    throw exception;
}
CapitulatingErrorStrategy.java 文件源码 项目:rapidminer 阅读 24 收藏 0 点赞 0 评论 0
@Override
protected void reportUnwantedToken(Parser recognizer) {
    // change error message from default implementation
    if (inErrorRecoveryMode(recognizer)) {
        return;
    }

    beginErrorCondition(recognizer);

    Token t = recognizer.getCurrentToken();
    String tokenName = getTokenErrorDisplay(t);
    String msg = "extraneous input " + tokenName + " expecting operator";
    recognizer.notifyErrorListeners(t, msg, null);
}
ParserErrorStrategy.java 文件源码 项目:elasticsearch_my 阅读 25 收藏 0 点赞 0 评论 0
@Override
public Token recoverInline(final Parser recognizer) throws RecognitionException {
    final Token token = recognizer.getCurrentToken();
    final String message = "unexpected token [" + getTokenErrorDisplay(token) + "]" +
        " was expecting one of [" + recognizer.getExpectedTokens().toString(recognizer.getVocabulary()) + "].";

    Location location = new Location(sourceName, token.getStartIndex());
    throw location.createError(new IllegalArgumentException(message));
}
GraphParser.java 文件源码 项目:digraph-parser 阅读 26 收藏 0 点赞 0 评论 0
@Override
public void reportAmbiguity(@NotNull Parser recognizer,
                            @NotNull DFA dfa,
                            int startIndex,
                            int stopIndex,
                            boolean exact,
                            @Nullable BitSet ambigAlts,
                            @NotNull ATNConfigSet configs)
{
}


问题


面经


文章

微信
公众号

扫码关注公众号