com.inxar.syntacs.translator.lr
Class ProxyLRTranslatorGrammar

java.lang.Object
  |
  +--com.inxar.syntacs.translator.lr.ProxyLRTranslatorGrammar
All Implemented Interfaces:
LRTranslatorGrammar, Serializable, TranslatorGrammar

public class ProxyLRTranslatorGrammar
extends Object
implements LRTranslatorGrammar

This class is a hack; it is required due to the dis-synchrony between the ID number of the grammar symbols when they are parsed into the StandardLRTranslatorGrammar instance and the ID numbers of the grammar symbols after they exists in the DPA.

Let me explain: When a grammar is parsed, the translator reads terminal and nonterminal names, and it adds those incrementally to the StandardLRTranslatorGrammar instance. The StandardLRTranslatorGrammar, in turn, is allocating ID numbers for those symbols as they come in. So far so good.

When the parse is finished, the StandardLRTranslatorGrammar is compiled and all the semantic checks are done. If everything checks out, the process of creating a Translator from this information begins. The first thing it does is create a RegularGrammar instances for each context in the grammar which is then transformed to a DFA. The second thing that happens is that a ContextFreeGrammar is created which is then transformed to a DPA.

The hangup is that the ContextFreeGrammar also allocated its own set of ID numbers for grammar symbols which may be slightly different than those used by the original StandardLRTranslatorGrammar. This creates a problem if the StandardLRTranslatorGrammar is used during actual translation because the DPAParser relies on the getProductionNonTerminal() and getProductionLength() methods for successful reduction.

This class is then a hybrid --- some of the methods are dispatched to the LRTranslatorGrammar, while the ones used in parsing are dispatched to the ContextFreeSet.

This "design" is a reflection of the fast that the StandardLRTranslatorGrammar and the ContextFreeSet were developed at different times; they have not yet been completely unified.

See Also:
Serialized Form

Fields inherited from interface org.inxar.syntacs.translator.lr.LRTranslatorGrammar
ACTION_PEEK, ACTION_PEEL, ACTION_POP, ACTION_POUNCE, ACTION_PUSH, UNDEFINED, UNDEFINED_CONTEXT, UNDEFINED_NONTERMINAL, UNDEFINED_PRODUCTION, UNDEFINED_SYMBOL, UNDEFINED_TERMINAL
 
Constructor Summary
ProxyLRTranslatorGrammar(LRTranslatorGrammar g, ContextFreeSet c)
           
 
Method Summary
 String getContext(int ID)
          Returns the name of the context having the given ID or null if no such ID is known.
 int getContextAction(int contextID, int symbolID)
          Returns the action defined for the given grammar symbol in the given context as one of the ACTION_XXX constants in this interface.
 int getContextRegister(int contextID, int symbolID)
          Returns an integer stored at the value of the given contextID and symbolID.
 IntArray getContexts()
          Returns the list of context ID numbers as an IntArray.
 IntArray getContextTerminals(int ID)
          Returns a list of terminals defined within the context having the given ID or null if no such ID is known.
 int getGoalNonTerminal()
          Returns the ID of the goal symbol (a nonterminal) or UNDEFINED_NONTERMINAL is no such goal symbol has been set.
 String getName()
          Returns the name of the Translator.
 String getNonTerminal(int ID)
          Returns the name of the nonterminal having the given ID or null if no such ID is known.
 IntArray getNonTerminals()
          Returns the list of nonterminal ID numbers as an IntArray.
 String getProduction(int ID)
          Returns the name of the production having the given ID or null if no such ID is known.
 int getProductionLength(int ID)
          Returns the length of the list of grammar symbols of the right-hand-side of the production having the given ID or UNDEFINED_PRODUCTION if no such ID is known.
 int getProductionNonTerminal(int ID)
          Returns the ID of the nonterminal obtained by reduction of the given productionID or UNDEFINED_PRODUCTION if no such production is known.
 IntArray getProductions()
          Returns the list of production ID numbers as an IntArray.
 IntArray getProductionSymbols(int ID)
          Returns the list of grammar symbols of the right-hand-side of the production having the given ID as an IntArray or null if no such ID is known.
 int getStartContext()
          Returns the ID of the initial context.
 String getTerminal(int ID)
          Returns the name of the terminal having the given ID or null if no such ID is known.
 IntArray getTerminalContexts(int ID)
          Returns a list of contexts in which this terminal is defined.
 Object getTerminalRegexp(int ID)
          Returns the regular expression String for the terminal having the given ID or null if no such ID is known.
 IntArray getTerminals()
          Returns the list of terminal ID numbers as an IntArray.
 String getVersion()
          Returns the version number given to this grammar.
 Translator newTranslator()
          Returns a new Translator for this TranslatorGrammar having some default set of properties.
 Translator newTranslator(Properties p)
          Returns a new Translator for this TranslatorGrammar using the given Properties.
 String toString()
           
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

ProxyLRTranslatorGrammar

public ProxyLRTranslatorGrammar(LRTranslatorGrammar g,
                                ContextFreeSet c)
Method Detail

getName

public String getName()
Description copied from interface: TranslatorGrammar
Returns the name of the Translator.
Specified by:
getName in interface TranslatorGrammar

getVersion

public String getVersion()
Description copied from interface: TranslatorGrammar
Returns the version number given to this grammar.
Specified by:
getVersion in interface TranslatorGrammar

newTranslator

public Translator newTranslator()
Description copied from interface: TranslatorGrammar
Returns a new Translator for this TranslatorGrammar having some default set of properties.
Specified by:
newTranslator in interface TranslatorGrammar

newTranslator

public Translator newTranslator(Properties p)
Description copied from interface: TranslatorGrammar
Returns a new Translator for this TranslatorGrammar using the given Properties. The names and values of the elements in the Properties may be used to modify or communicate with the internals of the Translator instance (such as turning on debugging). The specifics reagarding the names and values of the properties are specific to the translator itself and need be documented elsewhere.
Specified by:
newTranslator in interface TranslatorGrammar

getContexts

public IntArray getContexts()
Description copied from interface: LRTranslatorGrammar
Returns the list of context ID numbers as an IntArray.
Specified by:
getContexts in interface LRTranslatorGrammar

getContext

public String getContext(int ID)
Description copied from interface: LRTranslatorGrammar
Returns the name of the context having the given ID or null if no such ID is known.
Specified by:
getContext in interface LRTranslatorGrammar

getStartContext

public int getStartContext()
Description copied from interface: LRTranslatorGrammar
Returns the ID of the initial context.
Specified by:
getStartContext in interface LRTranslatorGrammar

getContextAction

public int getContextAction(int contextID,
                            int symbolID)
Description copied from interface: LRTranslatorGrammar
Returns the action defined for the given grammar symbol in the given context as one of the ACTION_XXX constants in this interface. If the contextID or symbolID is not known, UNDEFINED_CONTEXT or UNDEFINED_SYMBOL will be returned. Note: If UNDEFINED_SYMBOL is returned the ID may still be a valid terminal or nonterminal, but it not a member of the given context.
Specified by:
getContextAction in interface LRTranslatorGrammar

getContextRegister

public int getContextRegister(int contextID,
                              int symbolID)
Description copied from interface: LRTranslatorGrammar
Returns an integer stored at the value of the given contextID and symbolID. This is used in conjunction with getContextAction(int, int) such that the second member in the tuple (action, register) is returned. If the contextID or symbolID is not known, UNDEFINED_CONTEXT or UNDEFINED_SYMBOL will be returned.
Specified by:
getContextRegister in interface LRTranslatorGrammar

getContextTerminals

public IntArray getContextTerminals(int ID)
Description copied from interface: LRTranslatorGrammar
Returns a list of terminals defined within the context having the given ID or null if no such ID is known.
Specified by:
getContextTerminals in interface LRTranslatorGrammar

getTerminals

public IntArray getTerminals()
Description copied from interface: LRTranslatorGrammar
Returns the list of terminal ID numbers as an IntArray.
Specified by:
getTerminals in interface LRTranslatorGrammar

getTerminal

public String getTerminal(int ID)
Description copied from interface: LRTranslatorGrammar
Returns the name of the terminal having the given ID or null if no such ID is known.
Specified by:
getTerminal in interface LRTranslatorGrammar

getTerminalRegexp

public Object getTerminalRegexp(int ID)
Description copied from interface: LRTranslatorGrammar
Returns the regular expression String for the terminal having the given ID or null if no such ID is known. If the terminal ID is valid but no definition has been provided for that terminal, the empty string "" will be returned.
Specified by:
getTerminalRegexp in interface LRTranslatorGrammar

getTerminalContexts

public IntArray getTerminalContexts(int ID)
Description copied from interface: LRTranslatorGrammar
Returns a list of contexts in which this terminal is defined.
Specified by:
getTerminalContexts in interface LRTranslatorGrammar

getNonTerminals

public IntArray getNonTerminals()
Description copied from interface: LRTranslatorGrammar
Returns the list of nonterminal ID numbers as an IntArray.
Specified by:
getNonTerminals in interface LRTranslatorGrammar

getNonTerminal

public String getNonTerminal(int ID)
Description copied from interface: LRTranslatorGrammar
Returns the name of the nonterminal having the given ID or null if no such ID is known.
Specified by:
getNonTerminal in interface LRTranslatorGrammar

getGoalNonTerminal

public int getGoalNonTerminal()
Description copied from interface: LRTranslatorGrammar
Returns the ID of the goal symbol (a nonterminal) or UNDEFINED_NONTERMINAL is no such goal symbol has been set.
Specified by:
getGoalNonTerminal in interface LRTranslatorGrammar

getProductions

public IntArray getProductions()
Description copied from interface: LRTranslatorGrammar
Returns the list of production ID numbers as an IntArray.
Specified by:
getProductions in interface LRTranslatorGrammar

getProduction

public String getProduction(int ID)
Description copied from interface: LRTranslatorGrammar
Returns the name of the production having the given ID or null if no such ID is known. The String has the format "nonterminal: sym1 sym2 sym3" such that the nonterminal name is the first part of the string, followed by a colon, followed by a space delimited list of symbols.
Specified by:
getProduction in interface LRTranslatorGrammar

getProductionNonTerminal

public int getProductionNonTerminal(int ID)
Description copied from interface: LRTranslatorGrammar
Returns the ID of the nonterminal obtained by reduction of the given productionID or UNDEFINED_PRODUCTION if no such production is known.
Specified by:
getProductionNonTerminal in interface LRTranslatorGrammar

getProductionSymbols

public IntArray getProductionSymbols(int ID)
Description copied from interface: LRTranslatorGrammar
Returns the list of grammar symbols of the right-hand-side of the production having the given ID as an IntArray or null if no such ID is known.
Specified by:
getProductionSymbols in interface LRTranslatorGrammar

getProductionLength

public int getProductionLength(int ID)
Description copied from interface: LRTranslatorGrammar
Returns the length of the list of grammar symbols of the right-hand-side of the production having the given ID or UNDEFINED_PRODUCTION if no such ID is known.
Specified by:
getProductionLength in interface LRTranslatorGrammar

toString

public String toString()
Overrides:
toString in class Object