public SimpleParserSpecification changeGrammar()

in hybrid/src/main/java/jetbrains/jetpad/hybrid/parser/simple/SimpleParserSpecification.java [90:148]


  public SimpleParserSpecification<ExprT> changeGrammar(Handler<SimpleGrammarContext> handler) {
    handler.handle(new SimpleGrammarContext() {
      @Override
      public Grammar grammar() {
        return myGrammar;
      }

      @Override
      public Terminal terminal(Token token) {
        return getOrDeclareTerminal(token);
      }

      @Override
      public NonTerminal expr() {
        return myExpr;
      }

      @Override
      public Terminal error() {
        return myError;
      }

      @Override
      public Terminal id() {
        return myId;
      }

      @Override
      public Terminal number() {
        return myIntNumber;
      }

      @Override
      public Terminal bool() {
        return myBool;
      }

      @Override
      public Terminal value(String name, final Predicate<Object> predicate) {
        return customToken(name, new Predicate<Token>() {
          @Override
          public boolean apply(Token input) {
            if (input instanceof ValueToken) {
              return predicate.apply(((ValueToken) input).value());
            }
            return false;
          }
        });
      }

      @Override
      public Terminal customToken(String name, Predicate<Token> predicate) {
        Terminal terminal = myGrammar.newTerminal(name);
        myCustomTokens.put(predicate, terminal);
        return terminal;
      }
    });
    return this;
  }