/** Used during grammar imports to see if sets of rules intersect... public int hashCode() { return name.hashCode(); } * */ public String toString() { // used for testing return "["+grammar.name+"."+name+",index="+index+",line="+tree.getToken().getLine()+"]"; } }
/** Used during grammar imports to see if sets of rules intersect... public int hashCode() { return name.hashCode(); } * */ @Override public String toString() { // used for testing return "["+grammar.name+"."+name+",index="+index+",line="+tree.getToken().getLine()+"]"; } }
/** Used during grammar imports to see if sets of rules intersect... public int hashCode() { return name.hashCode(); } * */ public String toString() { // used for testing return "["+grammar.name+"."+name+",index="+index+",line="+tree.getToken().getLine()+"]"; } }
/** Used during grammar imports to see if sets of rules intersect... public int hashCode() { return name.hashCode(); } * */ @Override public String toString() { // used for testing return "["+grammar.name+"."+name+",index="+index+",line="+tree.getToken().getLine()+"]"; } }
/** Track a token reference within an outermost alt of a rule. Used * to decide if $tokenref refers to a unique token ref in * the alt. Does not track literals! * * Rewrite rules force tracking of all tokens. */ public void altReferencesTokenID(String ruleName, GrammarAST refAST, int outerAltNum) { Rule r = getLocallyDefinedRule(ruleName); if ( r==null ) { return; } r.trackTokenReferenceInAlt(refAST, outerAltNum); if ( !tokenIDRefs.contains(refAST.getToken()) ) { tokenIDRefs.add(refAST.getToken()); } }
/** Track a token reference within an outermost alt of a rule. Used * to decide if $tokenref refers to a unique token ref in * the alt. Does not track literals! * * Rewrite rules force tracking of all tokens. */ public void altReferencesTokenID(String ruleName, GrammarAST refAST, int outerAltNum) { Rule r = getLocallyDefinedRule(ruleName); if ( r==null ) { return; } r.trackTokenReferenceInAlt(refAST, outerAltNum); if ( !tokenIDRefs.contains(refAST.getToken()) ) { tokenIDRefs.add(refAST.getToken()); } }
/** Track a token reference within an outermost alt of a rule. Used * to decide if $tokenref refers to a unique token ref in * the alt. Does not track literals! * * Rewrite rules force tracking of all tokens. */ public void altReferencesTokenID(String ruleName, GrammarAST refAST, int outerAltNum) { Rule r = getLocallyDefinedRule(ruleName); if ( r==null ) { return; } r.trackTokenReferenceInAlt(refAST, outerAltNum); if ( !tokenIDRefs.contains(refAST.getToken()) ) { tokenIDRefs.add(refAST.getToken()); } }
/** Track a token reference within an outermost alt of a rule. Used * to decide if $tokenref refers to a unique token ref in * the alt. Does not track literals! * * Rewrite rules force tracking of all tokens. */ public void altReferencesTokenID(String ruleName, GrammarAST refAST, int outerAltNum) { Rule r = getLocallyDefinedRule(ruleName); if ( r==null ) { return; } r.trackTokenReferenceInAlt(refAST, outerAltNum); if ( !tokenIDRefs.contains(refAST.getToken()) ) { tokenIDRefs.add(refAST.getToken()); } }
protected void checkForRuleArgumentAndReturnValueConflicts(Rule r) { if ( r.returnScope!=null ) { Set conflictingKeys = r.returnScope.intersection(r.parameterScope); if (conflictingKeys!=null) { for (Iterator it = conflictingKeys.iterator(); it.hasNext();) { String key = (String) it.next(); ErrorManager.grammarError( ErrorManager.MSG_ARG_RETVAL_CONFLICT, grammar, r.tree.getToken(), key, r.name); } } } }
protected void checkForRuleArgumentAndReturnValueConflicts(Rule r) { if ( r.returnScope!=null ) { Set conflictingKeys = r.returnScope.intersection(r.parameterScope); if (conflictingKeys!=null) { for (Iterator it = conflictingKeys.iterator(); it.hasNext();) { String key = (String) it.next(); ErrorManager.grammarError( ErrorManager.MSG_ARG_RETVAL_CONFLICT, grammar, r.tree.getToken(), key, r.name); } } } }
/** Some targets will have some extra scopes like C++ may have * '@headerfile:name {action}' or something. Make sure the * target likes the scopes in action table. */ protected void verifyActionScopesOkForTarget(Map<String, Map<String, Object>> actions) { for (Map.Entry<String, Map<String, Object>> entry : actions.entrySet()) { String scope = entry.getKey(); if ( !target.isValidActionScope(grammar.type, scope) ) { // get any action from the scope to get error location Map<String, Object> scopeActions = entry.getValue(); GrammarAST actionAST = (GrammarAST)scopeActions.values().iterator().next(); ErrorManager.grammarError( ErrorManager.MSG_INVALID_ACTION_SCOPE,grammar, actionAST.getToken(),scope, grammar.getGrammarTypeString()); } } }
/** Given @scope::name {action} define it for this attribute scope. Later, * the code generator will ask for the actions table. */ public final void defineNamedAction(GrammarAST nameAST, GrammarAST actionAST) { String actionName = nameAST.getText(); GrammarAST a = actions.get(actionName); if (a != null) { ErrorManager.grammarError(ErrorManager.MSG_ACTION_REDEFINITION, grammar, nameAST.getToken(), nameAST.getText()); } else { actions.put(actionName, actionAST); } }
/** Given @scope::name {action} define it for this attribute scope. Later, * the code generator will ask for the actions table. */ public final void defineNamedAction(GrammarAST nameAST, GrammarAST actionAST) { String actionName = nameAST.getText(); GrammarAST a = actions.get(actionName); if (a != null) { ErrorManager.grammarError(ErrorManager.MSG_ACTION_REDEFINITION, grammar, nameAST.getToken(), nameAST.getText()); } else { actions.put(actionName, actionAST); } }
protected void checkForRuleArgumentAndReturnValueConflicts(Rule r) { if ( r.returnScope!=null ) { Set<String> conflictingKeys = r.returnScope.intersection(r.parameterScope); if (conflictingKeys!=null) { for (String key : conflictingKeys) { ErrorManager.grammarError( ErrorManager.MSG_ARG_RETVAL_CONFLICT, grammar, r.tree.getToken(), key, r.name); } } } }
protected void checkForRuleArgumentAndReturnValueConflicts(Rule r) { if ( r.returnScope!=null ) { Set<String> conflictingKeys = r.returnScope.intersection(r.parameterScope); if (conflictingKeys!=null) { for (String key : conflictingKeys) { ErrorManager.grammarError( ErrorManager.MSG_ARG_RETVAL_CONFLICT, grammar, r.tree.getToken(), key, r.name); } } } }
/** Given @scope::name {action} define it for this grammar. Later, * the code generator will ask for the actions table. */ public void defineNamedAction(GrammarAST ampersandAST, GrammarAST nameAST, GrammarAST actionAST) { //System.out.println("rule @"+nameAST.getText()+"{"+actionAST.getText()+"}"); String actionName = nameAST.getText(); GrammarAST a = (GrammarAST)actions.get(actionName); if ( a!=null ) { ErrorManager.grammarError( ErrorManager.MSG_ACTION_REDEFINITION,grammar, nameAST.getToken(),nameAST.getText()); } else { actions.put(actionName,actionAST); } }
/** Create a copy of the alt and make it into a BLOCK; all actions, * labels, tree operators, rewrites are removed. */ protected GrammarAST createBlockFromDupAlt(GrammarAST alt) { /* * ^(BLOCK["BLOCK"] {GrammarAST.dupTreeNoActions(alt)} EOB["<end-of-block>"]) */ GrammarAST nalt = GrammarAST.dupTreeNoActions(alt, null); GrammarAST block = (GrammarAST)adaptor.create(BLOCK, alt.getToken(), "BLOCK"); adaptor.addChild( block, nalt ); adaptor.addChild( block, adaptor.create( EOB, "<end-of-block>" ) ); return block; }
/** Create a copy of the alt and make it into a BLOCK; all actions, * labels, tree operators, rewrites are removed. */ protected GrammarAST createBlockFromDupAlt(GrammarAST alt) { /* * ^(BLOCK["BLOCK"] {GrammarAST.dupTreeNoActions(alt)} EOB["<end-of-block>"]) */ GrammarAST nalt = GrammarAST.dupTreeNoActions(alt, null); GrammarAST block = (GrammarAST)adaptor.create(BLOCK, alt.getToken(), "BLOCK"); adaptor.addChild( block, nalt ); adaptor.addChild( block, adaptor.create( EOB, "<end-of-block>" ) ); return block; }
protected GrammarAST setToBlockWithSet(GrammarAST b) { /* * alt = ^(ALT["ALT"] {b} EOA["EOA"]) * prefixWithSynpred( alt ) * return ^(BLOCK["BLOCK"] {alt} EOB["<end-of-block>"]) */ GrammarAST alt = (GrammarAST)adaptor.create(ALT, "ALT"); adaptor.addChild(alt, b); adaptor.addChild(alt, adaptor.create(EOA, "<end-of-alt>")); prefixWithSynPred(alt); GrammarAST block = (GrammarAST)adaptor.create(BLOCK, b.getToken(), "BLOCK"); adaptor.addChild(block, alt); adaptor.addChild(alt, adaptor.create(EOB, "<end-of-block>")); return block; }
protected GrammarAST setToBlockWithSet(GrammarAST b) { /* * alt = ^(ALT["ALT"] {b} EOA["EOA"]) * prefixWithSynpred( alt ) * return ^(BLOCK["BLOCK"] {alt} EOB["<end-of-block>"]) */ GrammarAST alt = (GrammarAST)adaptor.create(ALT, "ALT"); adaptor.addChild(alt, b); adaptor.addChild(alt, adaptor.create(EOA, "<end-of-alt>")); prefixWithSynPred(alt); GrammarAST block = (GrammarAST)adaptor.create(BLOCK, b.getToken(), "BLOCK"); adaptor.addChild(block, alt); adaptor.addChild(alt, adaptor.create(EOB, "<end-of-block>")); return block; }