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;
}