Esempio n. 1
0
 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.");
 }