public FlattenedGrammarAccess(final RuleNames names, final RuleFilter filter) { final Grammar grammar = names.getContextGrammar(); Grammar flattenedGrammar = this.<Grammar>copy(grammar); String _name = grammar.getName(); flattenedGrammar.setName(_name); LinkedHashMap<RuleWithParameterValues, AbstractRule> origToCopy = Maps.<RuleWithParameterValues, AbstractRule>newLinkedHashMap(); List<AbstractRule> _rules = filter.getRules(grammar); boolean _isDiscardRuleTypeRef = filter.isDiscardRuleTypeRef(); final ArrayList<AbstractRule> copies = this.copyRuleStubs(names, origToCopy, _rules, _isDiscardRuleTypeRef); EList<AbstractRule> _rules_1 = flattenedGrammar.getRules(); Iterables.<AbstractRule>addAll(_rules_1, copies); Multimap<TerminalRule, AbstractRule> calledFrom = this.copyRuleBodies(copies, origToCopy); this.setHiddenTokens(flattenedGrammar, grammar, origToCopy); this.markAsFragment(calledFrom); boolean _isDiscardUnreachableRules = filter.isDiscardUnreachableRules(); if (_isDiscardUnreachableRules) { Set<AbstractRule> usedRules = CollectionLiterals.<AbstractRule>newHashSet(); boolean _isDiscardTerminalRules = filter.isDiscardTerminalRules(); boolean _not = (!_isDiscardTerminalRules); if (_not) { List<TerminalRule> _allTerminalRules = GrammarUtil.allTerminalRules(flattenedGrammar); usedRules.addAll(_allTerminalRules); } UsedRulesFinder finder = new UsedRulesFinder(usedRules); finder.compute(flattenedGrammar); EList<AbstractRule> _rules_2 = flattenedGrammar.getRules(); _rules_2.retainAll(usedRules); } this.flattenedGrammar = flattenedGrammar; OriginalGrammar _originalGrammar = new OriginalGrammar(grammar); _originalGrammar.attachToEmfObject(flattenedGrammar); }
public LookAheadTerminal createLookAheadTerminal(Token token) { Grammar grammar = getGrammar(); String tokenName = getTokenNames()[token.getType()]; tokenName = getValueForTokenName(tokenName); if (tokenName.charAt(0) == '\'') { LookaheadKeyword result = new LookaheadKeyword(); result.setKeyword(tokenName.substring(1, tokenName.length() - 1)); result.setToken(token); return result; } LookAheadTerminalRuleCall result = new LookAheadTerminalRuleCall(); result.setToken(token); String ruleName = TokenTool.getLexerRuleName(tokenName); if (terminalRules == null) terminalRules = GrammarUtil.allTerminalRules(grammar); for (TerminalRule rule : terminalRules) { if (rule.getName().equalsIgnoreCase(ruleName)) { result.setRule(rule); return result; } } throw new IllegalArgumentException("tokenType " + token.getType() + " seems to be invalid."); }