Class AttributeScope

java.lang.Object
org.antlr.tool.AttributeScope
Direct Known Subclasses:
RuleLabelScope

public class AttributeScope extends Object
Track the attributes within a scope. A named scoped has just its list of attributes. Each rule has potentially 3 scopes: return values, parameters, and an implicitly-named scope (i.e., a scope defined in a rule). Implicitly-defined scopes are named after the rule; rules and scopes then must live in the same name space--no collisions allowed.
  • Field Details

    • tokenScope

      public static final AttributeScope tokenScope
      All token scopes (token labels) share the same fixed scope of of predefined attributes. I keep this out of the runtime.Token object to avoid a runtime space burden.
    • derivedFromToken

      public Token derivedFromToken
      This scope is associated with which input token (for error handling)?
    • grammar

      public Grammar grammar
    • name

      private String name
      The scope name
    • isDynamicGlobalScope

      public boolean isDynamicGlobalScope
      Not a rule scope, but visible to all rules "scope symbols { ...}"
    • isDynamicRuleScope

      public boolean isDynamicRuleScope
      Visible to all rules, but defined in rule "scope { int i; }"
    • isParameterScope

      public boolean isParameterScope
    • isReturnScope

      public boolean isReturnScope
    • isPredefinedRuleScope

      public boolean isPredefinedRuleScope
    • isPredefinedLexerRuleScope

      public boolean isPredefinedLexerRuleScope
    • attributes

      protected LinkedHashMap<String,Attribute> attributes
      The list of Attribute objects
    • actions

      public LinkedHashMap<String,GrammarAST> actions
  • Constructor Details

    • AttributeScope

      public AttributeScope(String name, Token derivedFromToken)
    • AttributeScope

      public AttributeScope(Grammar grammar, String name, Token derivedFromToken)
  • Method Details

    • getName

      public String getName()
    • addAttributes

      public void addAttributes(String definitions, int separator)
      From a chunk of text holding the definitions of the attributes, pull them apart and create an Attribute for each one. Add to the list of attributes for this scope. Pass in the character that terminates a definition such as ',' or ';'. For example, scope symbols { int n; List names; } would pass in definitions equal to the text in between {...} and separator=';'. It results in two Attribute objects.
    • addAttribute

      public void addAttribute(String name, String decl)
    • defineNamedAction

      public final void defineNamedAction(GrammarAST nameAST, GrammarAST actionAST)
      Given @scope::name {action} define it for this attribute scope. Later, the code generator will ask for the actions table.
    • getAttribute

      public Attribute getAttribute(String name)
    • getAttributes

      public List<Attribute> getAttributes()
      Used by templates to get all attributes
    • intersection

      public Set<String> intersection(AttributeScope other)
      Return the set of keys that collide from this and other.
    • size

      public int size()
    • toString

      public String toString()
      Overrides:
      toString in class Object