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

BQLCompilerAnalyzer.java 文件源码 项目:linden 阅读 19 收藏 0 点赞 0 评论 0
@Override
public void exitDelete_stmt(BQLParser.Delete_stmtContext ctx) {
  deleteRequest = new LindenDeleteRequest();
  if (ctx.dw != null) {
    LindenFilter filter = filterProperty.get(ctx.dw);
    if (filter == null) {
      throw new ParseCancellationException(new SemanticException(ctx, "Filter parse failed"));
    }
    LindenQuery query = LindenQueryBuilder.buildMatchAllQuery();
    query = LindenQueryBuilder.buildFilteredQuery(query, filter);
    deleteRequest.setQuery(query);
  } else {
    deleteRequest.setQuery(LindenQueryBuilder.buildMatchAllQuery());
  }
  if (ctx.route_param != null) {
    deleteRequest.setRouteParam((SearchRouteParam) valProperty.get(ctx.route_param));
  }
  if (ctx.indexes != null) {
    deleteRequest.setIndexNames((List<String>) valProperty.get(ctx.indexes));
  }
}
BQLCompilerAnalyzer.java 文件源码 项目:linden 阅读 18 收藏 0 点赞 0 评论 0
@Override
public void exitType(BQLParser.TypeContext ctx) {
  String type;
  if (ctx.primitive_type() != null) {
    type = ctx.primitive_type().getText();
  } else if (ctx.boxed_type() != null) {
    type = ctx.boxed_type().getText();
  } else if (ctx.limited_type() != null) {
    type = ctx.limited_type().getText();
  } else if (ctx.map_type() != null) {
    return;
  } else {
    throw new UnsupportedOperationException("Not implemented yet.");
  }
  try {
    if (type.equalsIgnoreCase("int")) {
      valProperty.put(ctx, LindenType.INTEGER);
    } else {
      valProperty.put(ctx, LindenType.valueOf(type.toUpperCase()));
    }
  } catch (Exception e) {
    throw new ParseCancellationException(new SemanticException(ctx, "Type " + type + " not support."));
  }
}
BQLCompilerAnalyzer.java 文件源码 项目:linden 阅读 18 收藏 0 点赞 0 评论 0
@Override
public void exitSnippet_clause(BQLParser.Snippet_clauseContext ctx) {
  if (ctx.selection_list() != null) {
    List<String> selections = (List<String>) valProperty.get(ctx.selection_list());
    if (selections != null && !selections.isEmpty()) {
      SnippetParam snippet = new SnippetParam();
      for (String selection : selections) {
        Map.Entry<String, LindenType> fieldNameAndType = getFieldNameAndType(selection);
        LindenType type = fieldNameAndType.getValue();
        String col = fieldNameAndType.getKey();
        if (type == LindenType.STRING) {
          snippet.addToFields(new SnippetField(col));
        } else {
          throw new ParseCancellationException("Snippet doesn't support this type " + type);
        }
      }
      valProperty.put(ctx, snippet);
    }
  }
}
BQLCompilerAnalyzer.java 文件源码 项目:linden 阅读 17 收藏 0 点赞 0 评论 0
@Override
public void exitPython_style_list(BQLParser.Python_style_listContext ctx) {
  List<String> values = new ArrayList<>();
  for (BQLParser.Python_style_valueContext subCtx : ctx.python_style_value()) {
    if (subCtx.value() != null) {
      values.add(subCtx.value().getText());
    } else if (subCtx.python_style_list() != null) {
      throw new ParseCancellationException(
          new SemanticException(subCtx.python_style_list(), "Nested list is not supported"));
    } else if (subCtx.python_style_dict() != null) {
      throw new ParseCancellationException(
          new SemanticException(subCtx.python_style_dict(), "Dict list is not supported"));
    }
  }
  valProperty.put(ctx, values);
}
BQLCompilerAnalyzer.java 文件源码 项目:linden 阅读 22 收藏 0 点赞 0 评论 0
@Override
public void exitAggregation_spec(BQLParser.Aggregation_specContext ctx) {
  String col = unescapeColumnName(ctx.column_name());
  Map.Entry<String, LindenType> fieldNameAndType = getFieldNameAndType(col);
  LindenType type = fieldNameAndType.getValue();
  if (type != LindenType.INTEGER && type != LindenType.LONG && type != LindenType.DOUBLE) {
    throw new ParseCancellationException(new SemanticException(ctx.column_name(),
                                                               "Aggregation doesn't support the type of the field \""
                                                               + col + "\"."));
  }
  col = fieldNameAndType.getKey();

  Aggregation aggregation = new Aggregation();
  aggregation.setField(col);
  aggregation.setType(type);
  for (BQLParser.Bucket_specContext specContext : ctx.bucket_spec()) {
    Bucket bucket = (Bucket) valProperty.get(specContext);
    if (bucket != null) {
      aggregation.addToBuckets(bucket);
    }
  }
  facetRequest.addToAggregations(aggregation);
}
BQLCompiler.java 文件源码 项目:linden 阅读 22 收藏 0 点赞 0 评论 0
public String getErrorMessage(ParseCancellationException error) {
  if (error.getCause() != null) {
    String message = error.getCause().getMessage();
    if (error.getCause() instanceof SemanticException) {
      SemanticException semanticException = (SemanticException) error.getCause();
      if (semanticException.getNode() != null) {
        TerminalNode startNode = getStartNode(semanticException.getNode());
        if (startNode != null) {
          String prefix = String.format("[line:%d, col:%d] ", startNode.getSymbol().getLine(),
              startNode.getSymbol().getCharPositionInLine());
          message = prefix + message;
        }
      }
      return message;
    } else if (error.getCause() instanceof RecognitionException) {
      return getErrorMessage((RecognitionException) error.getCause());
    } else {
      return error.getCause().getMessage();
    }
  }

  return error.getMessage();
}
InputOutputDeclarationSource.java 文件源码 项目:MatrixC 阅读 19 收藏 0 点赞 0 评论 0
private Object readMatrix(List<Object> parameters) {
  String rationalString = in.nextLine();

  MatrixLexer matrixLexer = new MatrixLexer(new ANTLRInputStream(rationalString));

  MatrixParser matrixParser = new MatrixParser(new CommonTokenStream(matrixLexer));

  matrixParser.setErrorHandler(new BailErrorStrategy());

  try {
    MatrixParser.MatrixContext matrixContext = matrixParser.matrix();

    return Matrix.fromMatrixContext(matrixContext, Scope.NULL_SCOPE);
  } catch (ParseCancellationException e) {
    throw new InvalidReadRuntimeError("Invalid input read from stdin! Expected matrix format!");
  }
}
QueryParserImpl.java 文件源码 项目:grakn 阅读 31 收藏 0 点赞 0 评论 0
/**
 * Parse the {@link GraqlParser} into a Java object, where errors are reported to the given
 * {@link GraqlErrorListener}.
 */
final T parse(GraqlParser parser, GraqlErrorListener errorListener) {
    S tree;

    try {
        tree = parseTree(parser);
    } catch (ParseCancellationException e) {
        // If we're using the BailErrorStrategy, we will throw here
        // This strategy is designed for parsing very large files and cannot provide useful error information
        throw GraqlSyntaxException.parsingError("syntax error");
    }

    if (errorListener.hasErrors()) {
        throw GraqlSyntaxException.parsingError(errorListener.toString());
    }

    return visit(getQueryVisitor(), tree);
}
LambdaInterpreterGUI.java 文件源码 项目:Lambda-Interpreter 阅读 23 收藏 0 点赞 0 评论 0
/**
 * Quand un terme sauvegardé dans la liste des termes sauvegardés est séléectionné il est possible
 * de voir son AST via le menu, ou le raccourci Ctrl+I / Cmd+I
 *
 * @param evt L'event qui a trigger l'action.
 */
private void menuViewASTActionPerformed(java.awt.event.ActionEvent evt) {
    if (!termSavedList.isSelectionEmpty()) {
        int index = termSavedList.getSelectedIndex();
        String term = saveTermModel.getElementAt(index);
        try {
            ANTLRInputStream inputStream = new ANTLRInputStream(term);
            LambdaLexer lexer = new LambdaLexer(inputStream);
            CommonTokenStream tokens = new CommonTokenStream(lexer);
            LambdaParser parser = new LambdaParser(tokens);
            ParseTree tree = parse(term);
            TreeViewer viewer = new TreeViewer(Arrays.asList(parser.getRuleNames()), tree);
            viewer.open();
        } catch (ParseCancellationException e) {
            workSpace.append("Don't try to watch AST of illformed term please");
        }
    }
}
RankPL.java 文件源码 项目:RankPL 阅读 20 收藏 0 点赞 0 评论 0
public static Program parse(String source) {
    RankPLLexer lexer = new RankPLLexer(new ANTLRInputStream(source));
    TokenStream tokens = new CommonTokenStream(lexer);
    RankPLParser parser = new RankPLParser(tokens);
    parser.setErrorHandler(new BailErrorStrategy());
    ConcreteParser classVisitor = new ConcreteParser();

    // Parse
    Program program = null;
    try {
        program = (Program) classVisitor.visit(parser.program());
    } catch (ParseCancellationException e) {
        System.out.println("Syntax error");
        lexer = new RankPLLexer(new ANTLRInputStream(source));
        tokens = new CommonTokenStream(lexer);
        parser = new RankPLParser(tokens);
        classVisitor = new ConcreteParser();
        try {
            program = (Program) classVisitor.visit(parser.program());
        } catch (Exception ex) {
            // Ignore
        }
        return null;
    }
    return program;
}
ReplState.java 文件源码 项目:L42 阅读 21 收藏 0 点赞 0 评论 0
public static ReplState start(String code){
Program p=Phase1CacheKey._handleCache();
try{
  boolean cached=p!=null;
  if(!cached){
    Timer.activate("RunningWithoutParsedCache");
    p= L42.parseAndDesugar("Repl",code);
    }
  ProgramReduction pr = new ProgramReduction(Paths.get("localhost","ReplCache.C42"),!cached);
  ReplState res=new ReplState(code,p.top(),p,pr);
  res.desugaredL=res.reduction.allSteps(res.p);
  res.p=res.p.updateTop(res.desugaredL);
  res.code=code.substring(1, code.length()-1); //to remove start and end {}
  return res;
  }
  catch(org.antlr.v4.runtime.misc.ParseCancellationException parser){
    System.out.println(parser.getMessage());
    return null;
    }
  catch(ErrorMessage msg){
    ErrorFormatter.topFormatErrorMessage(msg);
    return null;
    }
}
NumberNGTest.java 文件源码 项目:IrpTransmogrifier 阅读 20 收藏 0 点赞 0 评论 0
/**
 * Test of parse method, of class Number.
 */
@Test
public void testParse_String() {
    System.out.println("parse");
    try {
        assertEquals(Number.parse("UINT8_MAX"), 255L);
        assertEquals(Number.parse("UINT16_MAX"), 65535L);
        assertEquals(Number.parse("UINT24_MAX"), 16777215L);
        assertEquals(Number.parse("UINT32_MAX"), 4294967295L);
        assertEquals(Number.parse("UINT64_MAX"), -1L);
        assertEquals(Number.parse("073"), 59L);
        assertEquals(Number.parse("0"), 0L);
        assertEquals(Number.parse("123456789"), 123456789L);
        assertEquals(Number.parse("0xdeadbeef"), 0xdeadbeefL);
        assertEquals(Number.parse("0xdeadBeef"), 0xdeadbeefL);
    } catch (ParseCancellationException ex) {
        fail();
    }
}
DescriptiveErrorStrategy.java 文件源码 项目:groovy 阅读 27 收藏 0 点赞 0 评论 0
@Override
public void recover(Parser recognizer, RecognitionException e) {
    for (ParserRuleContext context = recognizer.getContext(); context != null; context = context.getParent()) {
        context.exception = e;
    }

    if (PredictionMode.LL.equals(recognizer.getInterpreter().getPredictionMode())) {
        if (e instanceof NoViableAltException) {
            this.reportNoViableAlternative(recognizer, (NoViableAltException) e);
        } else if (e instanceof InputMismatchException) {
            this.reportInputMismatch(recognizer, (InputMismatchException) e);
        } else if (e instanceof FailedPredicateException) {
            this.reportFailedPredicate(recognizer, (FailedPredicateException) e);
        }
    }

    throw new ParseCancellationException(e);
}
Compiler.java 文件源码 项目:LALU-Assembler 阅读 25 收藏 0 点赞 0 评论 0
@Override public String visitSource(MainParser.SourceContext ctx) {
    StringBuilder program = new StringBuilder("v2.0 raw\n");

    for (ParseTree child : ctx.children) {
        String currentByte = visit(child);
        if (! currentByte.isEmpty()) { // empty string doesn't effect program output
            if (currentByte.matches("^[01]{8}$")) {
                int value = Integer.parseInt(currentByte, 2);
                program.append(toBase(value, 16, 2) + " ");
                bytes++; // running count of bytes is important for visitAssignLabel
            } else {
                throw new ParseCancellationException(new com.github.charmoniumq.assembler.backend.InternalError(String.format("Invalid byte produced: %s", currentByte)));
            }
        }
    }
    return program.toString();
}
Elide.java 文件源码 项目:elide 阅读 23 收藏 0 点赞 0 评论 0
/**
 * Compile request to AST.
 *
 * @param path request
 * @return AST parse tree
 */
public static ParseTree parse(String path) {
    String normalizedPath = Paths.get(path).normalize().toString().replace(File.separatorChar, '/');
    if (normalizedPath.startsWith("/")) {
        normalizedPath = normalizedPath.substring(1);
    }
    ANTLRInputStream is = new ANTLRInputStream(normalizedPath);
    CoreLexer lexer = new CoreLexer(is);
    lexer.removeErrorListeners();
    lexer.addErrorListener(new BaseErrorListener() {
        @Override
        public void syntaxError(Recognizer<?, ?> recognizer, Object offendingSymbol, int line,
                                int charPositionInLine, String msg, RecognitionException e) {
            throw new ParseCancellationException(msg, e);
        }
    });
    CoreParser parser = new CoreParser(new CommonTokenStream(lexer));
    parser.setErrorHandler(new BailErrorStrategy());
    return parser.start();
}
JsonApiParser.java 文件源码 项目:elide 阅读 18 收藏 0 点赞 0 评论 0
/**
 * Compile request to AST.
 * @param path request
 * @return AST
 */
public static ParseTree parse(String path) {
    ANTLRInputStream is = new ANTLRInputStream(path);
    CoreLexer lexer = new CoreLexer(is);
    lexer.removeErrorListeners();
    lexer.addErrorListener(new BaseErrorListener() {
        @Override
        public void syntaxError(Recognizer<?, ?> recognizer, Object offendingSymbol, int line,
                int charPositionInLine, String msg, RecognitionException e) {
            throw new ParseCancellationException(e);
        }
    });
    CoreParser parser = new CoreParser(new CommonTokenStream(lexer));
    parser.setErrorHandler(new BailErrorStrategy());
    return parser.start();
}
EntityPermissions.java 文件源码 项目:elide 阅读 21 收藏 0 点赞 0 评论 0
public static ParseTree parseExpression(String expression) {
    ANTLRInputStream is = new ANTLRInputStream(expression);
    ExpressionLexer lexer = new ExpressionLexer(is);
    lexer.removeErrorListeners();
    lexer.addErrorListener(new BaseErrorListener() {
        @Override
        public void syntaxError(Recognizer<?, ?> recognizer, Object offendingSymbol, int line,
                                int charPositionInLine, String msg, RecognitionException e) {
            throw new ParseCancellationException(msg, e);
        }
    });
    ExpressionParser parser = new ExpressionParser(new CommonTokenStream(lexer));
    parser.setErrorHandler(new BailErrorStrategy());
    lexer.reset();
    return parser.start();
}
MiniJParserTest.java 文件源码 项目:MiniJCompiler 阅读 27 收藏 0 点赞 0 评论 0
@Test
public void testParseFailingExamples() throws IOException {
    FileVisitor<Path> workingFilesVisitior = new SimpleFileVisitor<Path>() {
        @Override
        public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
            System.out.println("Testing parser input from file \""+file.toString()+"\"");
            ANTLRFileStream antlrStream = new ANTLRFileStream(file.toString());
            MiniJLexer lexer = new MiniJLexer(antlrStream);
            TokenStream tokens = new CommonTokenStream(lexer);
            MiniJParser parser = new MiniJParser(tokens);
            parser.setErrorHandler(new BailErrorStrategy());
            /*
             * Catch all exceptions first, to ensure that every single
             * compilation unit exits with an Exception. Otherwise, this
             * method will return after the first piece of code.
             */
            try {
                parser.prog();
                fail("The example "+file.toString()+" should have failed, but was accepted by the parser.");
            } catch (ParseCancellationException e) {
            }
            return super.visitFile(file, attrs);
        }
    };
    Files.walkFileTree(EXAMPLE_PROGRAM_PATH_FAILING, workingFilesVisitior);
}
BoaCompiler.java 文件源码 项目:compiler 阅读 21 收藏 0 点赞 0 评论 0
private static Start parse(final CommonTokenStream tokens, final BoaParser parser, final BoaErrorListener parserErrorListener) {
    parser.setBuildParseTree(false);
    parser.getInterpreter().setPredictionMode(PredictionMode.SLL);

    try {
        return parser.start().ast;
    } catch (final ParseCancellationException e) {
        // fall-back to LL mode parsing if SLL fails
        tokens.reset();
        parser.reset();

        parser.removeErrorListeners();
        parser.addErrorListener(parserErrorListener);
        parser.getInterpreter().setPredictionMode(PredictionMode.LL);

        return parser.start().ast;
    }
}
TwoPhaseParser.java 文件源码 项目:hypertalk-java 阅读 21 收藏 0 点赞 0 评论 0
/**
 * "First phase" parsing attempt. Provides better performance than {@link #parseLL(CompilationUnit, String)}, but
 * will erroneously report syntax errors when parsing script text utilizing certain parts of the grammar.
 *
 * @param compilationUnit The unit of work to compile/parse. Represents the grammar's start symbol that should be
 *                        used.
 * @param scriptText A plaintext representation of the HyperTalk script to parse
 * @return The root of the abstract syntax tree associated with the given compilation unit (i.e., {@link Script}),
 * or null if parsing fails.
 */
static Object parseSLL(CompilationUnit compilationUnit, String scriptText) {
    HyperTalkLexer lexer = new HyperTalkLexer(new CaseInsensitiveInputStream(scriptText));
    CommonTokenStream tokens = new CommonTokenStream(lexer);
    HyperTalkParser parser = new HyperTalkParser(tokens);

    parser.setErrorHandler(new BailErrorStrategy());
    parser.removeErrorListeners();
    parser.getInterpreter().setPredictionMode(PredictionMode.SLL);

    try {
        ParseTree tree = compilationUnit.getParseTree(parser);
        return new HyperTalkTreeVisitor().visit(tree);
    } catch (ParseCancellationException e) {
        return null;
    }
}
ZomicASTCompiler.java 文件源码 项目:vzome-core 阅读 23 收藏 0 点赞 0 评论 0
public Walk compile( CharStream input, ErrorHandler errors ) {
     try  {
         return compile( input );
     } catch (ParseCancellationException ex) {
int line = ErrorHandler.UNKNOWN;
int column = ErrorHandler.UNKNOWN;
String msg = "Parser Cancelled.";
Throwable cause = ex.getCause();
if( cause instanceof InputMismatchException ) {
    InputMismatchException immEx = (InputMismatchException) cause;
    Token offender = immEx.getOffendingToken();
    if( offender != null ) {
        line = offender.getLine();
        column = offender.getCharPositionInLine();
        String txt = offender.getText();
        if(txt != null) {
            msg = " Unexpected Token '" + txt + "'.";
        }
    }
}
         errors.parseError( line, column, msg );
     }      
     return getProgram();
 }
QueryDSL.java 文件源码 项目:ameba 阅读 21 收藏 0 点赞 0 评论 0
/**
 * <p>parse.</p>
 *
 * @param expression a {@link java.lang.String} object.
 * @return a {@link java.util.List} object.
 */
public static List<QueryExprMeta> parse(String expression) {
    QueryParser parser = parser(tokens(expression));
    try {
        return parse(parser);
    } catch (ParseCancellationException | RecognitionException e) {
        RecognitionException err;
        if (e instanceof ParseCancellationException) {
            err = (RecognitionException) e.getCause();
        } else {
            err = (RecognitionException) e;
        }
        throw new QuerySyntaxException(
                Messages.get("dsl.parse.err", err.getOffendingToken().getCharPositionInLine()),
                e
        );
    }
}
StencilEngine.java 文件源码 项目:stencil 阅读 18 收藏 0 点赞 0 评论 0
private TemplateContext parse(Reader reader) throws IOException, ParseException {

  ANTLRInputStream inputStream = new ANTLRInputStream(reader);

  StencilLexer lexer = new StencilLexer(inputStream);

  CommonTokenStream tokenStream = new CommonTokenStream(lexer);

  StencilParser parser = new StencilParser(tokenStream);
  parser.setErrorHandler(new StencilErrorStrategy());

  try {
    return parser.template();
  }
  catch(ParseCancellationException e) {
    RecognitionException re = (RecognitionException) e.getCause();
    throw new ParseException("syntax error at " + re.getOffendingToken().getText(), re.getOffendingToken().getLine(), re.getOffendingToken().getCharPositionInLine()+1);
  }
}
ExpressionSimplificationVisitor.java 文件源码 项目:udidb 阅读 25 收藏 0 点赞 0 评论 0
@Override
public Void visitFloatingConstant(@NotNull FloatingConstantContext ctx)
{
    NodeState nodeState = getNodeState(ctx);

    Number value;
    DebugType floatType = nodeState.getEffectiveType();
    if (floatType == Types.getType(Types.FLOAT_NAME)) {
        value = Float.parseFloat(ctx.getText());
    }else if (floatType == Types.getType(Types.DOUBLE_NAME)) {
        value = Double.parseDouble(ctx.getText());
    }else{
        throw new ParseCancellationException(INVALID_TREE_MSG);
    }

    nodeState.setExpressionValue(new NumberValue(value));
    return null;
}
SimpleErrorListener.java 文件源码 项目:inflectible 阅读 19 收藏 0 点赞 0 评论 0
@Override
public void syntaxError(
    final Recognizer<?, ?> recognizer,
    final Object offending,
    final int line,
    final int position,
    final String msg,
    final RecognitionException exception
) {
    super.syntaxError(
        recognizer,
        offending,
        line,
        position,
        msg,
        exception
    );
    throw new ParseCancellationException(exception);
}
StructuredQueryParser.java 文件源码 项目:graphflow 阅读 18 收藏 0 点赞 0 评论 0
public StructuredQuery parse(String query) throws ParseCancellationException {
    GraphflowLexer lexer = new GraphflowLexer(CharStreams.fromString(query));
    lexer.removeErrorListeners();   // Remove default listeners first.
    lexer.addErrorListener(ErrorListener.INSTANCE);

    GraphflowParser parser = new GraphflowParser(new CommonTokenStream(lexer));
    parser.removeErrorListeners();   // Remove default listeners first.
    parser.addErrorListener(ErrorListener.INSTANCE);

    try {
        ParseTree tree = parser.graphflow();
        GraphflowVisitor visitor = new GraphflowVisitor();
        return (StructuredQuery) visitor.visit(tree);
    } catch (Exception e) {
        throw new ParseCancellationException(e.getMessage());
    }
}
SqlParser.java 文件源码 项目:rainbow 阅读 33 收藏 0 点赞 0 评论 0
private Node invokeParser(String name, String sql, Function<SqlBaseParser, ParserRuleContext> parseFunction, ParsingOptions parsingOptions)
{
    try {
        SqlBaseLexer lexer = new SqlBaseLexer(new CaseInsensitiveStream(new ANTLRInputStream(sql)));
        CommonTokenStream tokenStream = new CommonTokenStream(lexer);
        SqlBaseParser parser = new SqlBaseParser(tokenStream);

        parser.addParseListener(new PostProcessor(Arrays.asList(parser.getRuleNames())));

        lexer.removeErrorListeners();
        lexer.addErrorListener(ERROR_LISTENER);

        parser.removeErrorListeners();
        parser.addErrorListener(ERROR_LISTENER);

        ParserRuleContext tree;
        try {
            // first, try parsing with potentially faster SLL mode
            parser.getInterpreter().setPredictionMode(PredictionMode.SLL);
            tree = parseFunction.apply(parser);
        }
        catch (ParseCancellationException ex) {
            // if we fail, parse with LL mode
            tokenStream.reset(); // rewind input stream
            parser.reset();

            parser.getInterpreter().setPredictionMode(PredictionMode.LL);
            tree = parseFunction.apply(parser);
        }

        return new AstBuilder(parsingOptions).visit(tree);
    }
    catch (StackOverflowError e) {
        throw new ParsingException(name + " is too large (stack overflow while parsing)");
    }
}
TypeCalculation.java 文件源码 项目:rainbow 阅读 21 收藏 0 点赞 0 评论 0
private static ParserRuleContext parseTypeCalculation(String calculation)
{
    TypeCalculationLexer lexer = new TypeCalculationLexer(new CaseInsensitiveStream(new ANTLRInputStream(calculation)));
    CommonTokenStream tokenStream = new CommonTokenStream(lexer);
    TypeCalculationParser parser = new TypeCalculationParser(tokenStream);

    lexer.removeErrorListeners();
    lexer.addErrorListener(ERROR_LISTENER);

    parser.removeErrorListeners();
    parser.addErrorListener(ERROR_LISTENER);

    ParserRuleContext tree;
    try {
        // first, try parsing with potentially faster SLL mode
        parser.getInterpreter().setPredictionMode(PredictionMode.SLL);
        tree = parser.typeCalculation();
    }
    catch (ParseCancellationException ex) {
        // if we fail, parse with LL mode
        tokenStream.reset(); // rewind input stream
        parser.reset();

        parser.getInterpreter().setPredictionMode(PredictionMode.LL);
        tree = parser.typeCalculation();
    }
    return tree;
}
Calculator.java 文件源码 项目:antlr-examples 阅读 31 收藏 0 点赞 0 评论 0
/**
 * Returns the value of the given expression.
 *
 * <p>For example, {@code evaluate("1+2")} returns {@code 3.0}, but {@code evaluate("1+")} throws
 * an exception.
 *
 * @param input the {@code String} to parse and evaluate
 * @return the value of the given expression
 * @throws IllegalArgumentException if {@code input} is an invalid expression
 */
public static double evaluate(String input) {
  CalculatorParser parser = ParserUtil.newParser(
      CalculatorLexer::new, CalculatorParser::new, input);
  ExpressionEvaluator evaluator = new ExpressionEvaluator();

  try {
    ParserUtil.parseAndWalk(parser::expression, evaluator);
  } catch (ParseCancellationException e) {
    throw new IllegalArgumentException("Invalid expression", e);
  }

  return evaluator.getValue();
}
Parentheses.java 文件源码 项目:antlr-examples 阅读 21 收藏 0 点赞 0 评论 0
/**
 * Returns whether {@code input} consists of balanced parentheses.
 *
 * <p>For example, {@code verify("(())")} returns true, but {@code verify("(")} returns false.
 *
 * @param input the {@code String} to parse and verify
 * @return whether {@code input} consists of balanced parentheses
 */
public static boolean verify(String input) {
  ParenthesesParser parser = ParserUtil.newParser(
      ParenthesesLexer::new, ParenthesesParser::new, input);

  try {
    parser.expression();
  } catch (ParseCancellationException e) {
    return false;
  }

  return true;
}


问题


面经


文章

微信
公众号

扫码关注公众号