/** * {@inheritDoc} */ @Override public void setRootRule(GrammarRuleKey ruleKey) { rule(ruleKey); rootRuleKey = ruleKey; }
/** * {@inheritDoc} */ public void setRootRule(GrammarRuleKey ruleKey) { rule(ruleKey); rootRuleKey = ruleKey; }
@Override public Object is(Object method) { if (expressionStack.size() != 1) { throw new IllegalStateException("Unexpected stack size: " + expressionStack.size()); } ParsingExpression expression = pop(); b.rule(ruleKey).is(expression); this.buildingMethod = null; this.ruleKey = null; return null; }
@Override public Object is(Object method) { Preconditions.checkState(expressionStack.size() == 1, "Unexpected stack size: " + expressionStack.size()); ParsingExpression expression = pop(); b.rule(ruleKey).is(expression); this.buildingMethod = null; this.ruleKey = null; return null; }
@Override public Object is(Object method) { Preconditions.checkState(expressionStack.size() == 1, "Unexpected stack size: " + expressionStack.size()); ParsingExpression expression = pop(); b.rule(ruleKey).is(expression); this.buildingMethod = null; this.ruleKey = null; return null; }
private static void punctuator(LexerlessGrammarBuilder b, GrammarRuleKey ruleKey, String value) { for (EcmaScriptPunctuator tokenType : EcmaScriptPunctuator.values()) { if (value.equals(tokenType.getValue())) { b.rule(tokenType).is(SPACING, value); return; } } throw new IllegalStateException(value); }
public static Grammar undefinedRule() { LexerlessGrammarBuilder b = LexerlessGrammarBuilder.create(); b.rule(A); return b.build(); }
private static void punctuators(LexerlessGrammarBuilder b) { for (FlexPunctuator p : FlexPunctuator.values()) { b.rule(p).is(SPACING, p.getValue()); } }
private static void functions(LexerlessGrammarBuilder b) { b.rule(spec).is(minus, b.firstOf(semiKeyword("spec", b), semiKeyword("callback", b)), b.zeroOrMore(b.firstOf(b.regexp("\\.(\\.+|.)"), b.regexp("[^\\.]")), spacing), dot); b.rule(typeSpec).is(minus, b.firstOf(semiKeyword("type", b), semiKeyword("opaque", b)), b.zeroOrMore(b.firstOf(b.regexp("\\.(\\.+|.)"), b.regexp("[^\\.]")), spacing), dot); b.rule(functionDeclaration).is(functionClause, b.zeroOrMore(semi, functionClause), dot); b.rule(functionClause).is(clauseHead, arrow, clauseBody); b.rule(clauseHead).is(funcDecl, b.optional(guardSequenceStart)); b.rule(clauseBody).is(statements); b.rule(funcArity).is(b.optional(literal, colon), literal, div, literal); b.rule(funcDecl).is(literal, arguments); }
public void addAction(Method method, int stackElements) { method.setAccessible(true); GrammarRuleKey grammarRuleKey = new DummyGrammarRuleKey(method); actions.put(grammarRuleKey, method); ParsingExpression expression = stackElements == 1 ? pop() : new SequenceExpression(pop(stackElements)); b.rule(grammarRuleKey).is(expression); invokeRule(grammarRuleKey); }
@Override public <U> List<U> oneOrMore(U method) { ParsingExpression expression = pop(); GrammarRuleKey grammarRuleKey = new DummyGrammarRuleKey("oneOrMore", expression); oneOrMores.add(grammarRuleKey); b.rule(grammarRuleKey).is(b.oneOrMore(expression)); invokeRule(grammarRuleKey); return null; }
@Override public <U> Optional<List<U>> zeroOrMore(U method) { ParsingExpression expression = pop(); GrammarRuleKey grammarRuleKey = new DummyGrammarRuleKey("zeroOrMore", expression); zeroOrMores.add(grammarRuleKey); b.rule(grammarRuleKey).is(b.zeroOrMore(expression)); invokeRule(grammarRuleKey); return null; }
@Override public <T> Optional<List<T>> zeroOrMore(T method) { ParsingExpression expression = pop(); GrammarRuleKey ruleKey = new DummyGrammarRuleKey("zeroOrMore", expression); zeroOrMores.add(ruleKey); b.rule(ruleKey).is(b.zeroOrMore(expression)); invokeRule(ruleKey); return null; }
@Override public <T> Optional<T> optional(T method) { ParsingExpression expression = pop(); GrammarRuleKey ruleKey = new DummyGrammarRuleKey("optional", expression); optionals.add(ruleKey); b.rule(ruleKey).is(b.optional(expression)); invokeRule(ruleKey); return null; }
@Override public <T> List<T> oneOrMore(T method) { ParsingExpression expression = pop(); GrammarRuleKey ruleKey = new DummyGrammarRuleKey("oneOrMore", expression); oneOrMores.add(ruleKey); b.rule(ruleKey).is(b.oneOrMore(expression)); invokeRule(ruleKey); return null; }
@Override public <T> Optional<T> optional(T method) { ParsingExpression expression = pop(); GrammarRuleKey ruleKey = new DummyGrammarRuleKey("optional", expression); optionals.add(ruleKey); b.rule(ruleKey).is(b.optional(expression)); invokeRule(ruleKey); return null; }
public void replaceByRule(GrammarRuleKey ruleKey, int stackElements) { ParsingExpression expression = stackElements == 1 ? pop() : new SequenceExpression(pop(stackElements)); b.rule(ruleKey).is(expression); invokeRule(ruleKey); }
public static LexerlessGrammarBuilder createGrammarBuilder() { LexerlessGrammarBuilder b = LexerlessGrammarBuilder.create(); b.rule(IDENTIFIER_NAME).is( SPACING, b.regexp(EcmaScriptLexer.IDENTIFIER)); lexical(b); b.setRootRule(SCRIPT); return b; }
private static void spacing(LexerlessGrammarBuilder b, String commentRegex) { b.rule(SPACING).is( b.skippedTrivia(b.regexp("(?<!\\\\)[\\s]*+")), b.zeroOrMore( b.commentTrivia(b.regexp(commentRegex)), b.skippedTrivia(b.regexp("(?<!\\\\)[\\s]*+")))); }