private Parser(Builder<G> builder) { this.lexer = builder.lexer; this.grammar = builder.grammar; this.rootRule = (RuleDefinition) this.grammar.getRootRule(); }
/** * Find all direct and indirect rule fields declared in the given Grammar class. * Inherited rule fields are also returned. * * @param grammarClass * the class of the Grammar for which rule fields must be found * @return the rule fields declared in this class, as well as the inherited ones * @see getRuleFields */ public static List<Field> getAllRuleFields(Class grammarClass) { List<Field> ruleFields = getRuleFields(grammarClass); Class superClass = grammarClass.getSuperclass(); while (superClass != null) { ruleFields.addAll(getRuleFields(superClass)); superClass = superClass.getSuperclass(); } return ruleFields; }
public Grammar() { instanciateRuleFields(); }
/** * @since 1.14 * @deprecated in 1.19, use {@link org.sonar.sslr.grammar.LexerfulGrammarBuilder#buildWithMemoizationOfMatchesForAllRules()} instead. */ @Deprecated public static void enableMemoizationOfMatchesForAllRules(Grammar grammar) { for (Field ruleField : Grammar.getAllRuleFields(grammar.getClass())) { String ruleName = ruleField.getName(); RuleDefinition rule; try { rule = (RuleDefinition) ruleField.get(grammar); } catch (IllegalAccessException e) { throw new IllegalStateException("Unable to enable memoization for rule '" + ruleName + "'", e); } rule.enableMemoization(); } }
protected void setRootRule(GrammarRuleKey ruleKey) { p.setRootRule(p.getGrammar().rule(ruleKey)); } }
/** * @since 1.14 * @deprecated in 1.19, use {@link org.sonar.sslr.grammar.LexerfulGrammarBuilder#buildWithMemoizationOfMatchesForAllRules()} instead. */ @Deprecated public static void enableMemoizationOfMatchesForAllRules(Grammar grammar) { for (Field ruleField : Grammar.getAllRuleFields(grammar.getClass())) { String ruleName = ruleField.getName(); RuleDefinition rule; try { rule = (RuleDefinition) ruleField.get(grammar); } catch (IllegalAccessException e) { throw new IllegalStateException("Unable to enable memoization for rule '" + ruleName + "'", e); } rule.enableMemoization(); } }
/** * Re-parses a query that was retrieved as a String. * * @param astNode The String's node. * @return The query as a new QUERY_EXPRESSION node. */ public static AstNode parseQuery(AstNode astNode) { AstNode parsedQuery = null; try { String string = astNode.getTokenOriginalValue(); String queryAsString = StringUtils.substringBetween(string, "'", "'"); Parser<Grammar> queryParser = ApexParser.create(new ApexConfiguration(Charsets.UTF_8)); queryParser.setRootRule(queryParser.getGrammar().rule(ApexGrammarRuleKey.QUERY_EXPRESSION)); parsedQuery = queryParser.parse(queryAsString); } catch (Exception e) { ChecksLogger.logCheckError(CLASS_TO_LOG, METHOD_TO_LOG, e.toString()); } return parsedQuery; } }
private Parser(Builder<G> builder) { this.lexer = builder.lexer; this.grammar = builder.grammar; this.rootRule = (RuleDefinition) this.grammar.getRootRule(); }
/** * @since 1.14 * @deprecated in 1.19, use {@link org.sonar.sslr.grammar.LexerfulGrammarBuilder#buildWithMemoizationOfMatchesForAllRules()} instead. */ @Deprecated public static void enableMemoizationOfMatchesForAllRules(Grammar grammar) { for (Field ruleField : Grammar.getAllRuleFields(grammar.getClass())) { String ruleName = ruleField.getName(); RuleDefinition rule; try { rule = (RuleDefinition) ruleField.get(grammar); } catch (IllegalAccessException e) { throw new IllegalStateException("Unable to enable memoization for rule '" + ruleName + "'", e); } rule.enableMemoization(); } }
@Test public void ok() { p.getGrammar().rule(PerlGrammar.ATOM).mock(); assertThat(p).matches("ATOM"); assertThat(p).matches("ATOM ATOM"); assertThat(p).matches("\n"); assertThat(p).matches("ATOM\nATOM"); }
public Grammar() { instanciateRuleFields(); }
/** * Find all direct and indirect rule fields declared in the given Grammar class. * Inherited rule fields are also returned. * * @param grammarClass * the class of the Grammar for which rule fields must be found * @return the rule fields declared in this class, as well as the inherited ones * @see getRuleFields */ public static List<Field> getAllRuleFields(Class grammarClass) { List<Field> ruleFields = getRuleFields(grammarClass); Class superClass = grammarClass.getSuperclass(); while (superClass != null) { ruleFields.addAll(getRuleFields(superClass)); superClass = superClass.getSuperclass(); } return ruleFields; }
private Parser(Builder<G> builder) { this.lexer = builder.lexer; this.grammar = builder.grammar; this.rootRule = (RuleDefinition) this.grammar.getRootRule(); }
private void instanciateRuleFields() { for (Field ruleField : getAllRuleFields(this.getClass())) { String ruleName = ruleField.getName(); try { Rule rule; if (this instanceof LexerlessGrammar) { rule = new MutableParsingRule(ruleName); } else { rule = new RuleDefinition(ruleName); } ruleField.setAccessible(true); ruleField.set(this, rule); } catch (Exception e) { throw new GrammarException(e, "Unable to instanciate the rule '" + ruleName + "': " + e.getMessage()); } } }
public Grammar() { instanciateRuleFields(); }
/** * Find all direct and indirect rule fields declared in the given Grammar class. * Inherited rule fields are also returned. * * @param grammarClass * the class of the Grammar for which rule fields must be found * @return the rule fields declared in this class, as well as the inherited ones * @see getRuleFields */ public static List<Field> getAllRuleFields(Class grammarClass) { List<Field> ruleFields = getRuleFields(grammarClass); Class superClass = grammarClass.getSuperclass(); while (superClass != null) { ruleFields.addAll(getRuleFields(superClass)); superClass = superClass.getSuperclass(); } return ruleFields; }
@Setup public void setup() { int n = Integer.getInteger("n", 3); input = ("t" + Strings.repeat("+t", n)).toCharArray(); recursive = new ParseRunner(MyGrammar.recursive().getRootRule()); greedy = new ParseRunner(MyGrammar.greedy().getRootRule()); }
private void instanciateRuleFields() { for (Field ruleField : getAllRuleFields(this.getClass())) { String ruleName = ruleField.getName(); try { Rule rule; if (this instanceof LexerlessGrammar) { rule = new MutableParsingRule(ruleName); } else { rule = new RuleDefinition(ruleName); } ruleField.setAccessible(true); ruleField.set(this, rule); } catch (Exception e) { throw new GrammarException(e, "Unable to instanciate the rule '" + ruleName + "': " + e.getMessage()); } } }
this.rootRule = rootRule; this.grammar = b.build(); this.parseRunner = new ParseRunner(this.grammar.getRootRule());
private void instanciateRuleFields() { for (Field ruleField : getAllRuleFields(this.getClass())) { String ruleName = ruleField.getName(); try { Rule rule; if (this instanceof LexerlessGrammar) { rule = new MutableParsingRule(ruleName); } else { rule = new RuleDefinition(ruleName); } ruleField.setAccessible(true); ruleField.set(this, rule); } catch (Exception e) { throw new GrammarException(e, "Unable to instanciate the rule '" + ruleName + "': " + e.getMessage()); } } }