|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: INNER | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object | +--com.inxar.syntacs.translator.lr.ProxyLRTranslatorGrammar
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.
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 |
public ProxyLRTranslatorGrammar(LRTranslatorGrammar g, ContextFreeSet c)
Method Detail |
public String getName()
TranslatorGrammar
Translator
.getName
in interface TranslatorGrammar
public String getVersion()
TranslatorGrammar
getVersion
in interface TranslatorGrammar
public Translator newTranslator()
TranslatorGrammar
Translator
for this
TranslatorGrammar
having some default set of
properties.newTranslator
in interface TranslatorGrammar
public Translator newTranslator(Properties p)
TranslatorGrammar
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.newTranslator
in interface TranslatorGrammar
public IntArray getContexts()
LRTranslatorGrammar
IntArray
.getContexts
in interface LRTranslatorGrammar
public String getContext(int ID)
LRTranslatorGrammar
null
if no such ID is known.getContext
in interface LRTranslatorGrammar
public int getStartContext()
LRTranslatorGrammar
getStartContext
in interface LRTranslatorGrammar
public int getContextAction(int contextID, int symbolID)
LRTranslatorGrammar
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.getContextAction
in interface LRTranslatorGrammar
public int getContextRegister(int contextID, int symbolID)
LRTranslatorGrammar
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.getContextRegister
in interface LRTranslatorGrammar
public IntArray getContextTerminals(int ID)
LRTranslatorGrammar
null
if no such ID is known.getContextTerminals
in interface LRTranslatorGrammar
public IntArray getTerminals()
LRTranslatorGrammar
IntArray
.getTerminals
in interface LRTranslatorGrammar
public String getTerminal(int ID)
LRTranslatorGrammar
null
if no such ID is known.getTerminal
in interface LRTranslatorGrammar
public Object getTerminalRegexp(int ID)
LRTranslatorGrammar
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.getTerminalRegexp
in interface LRTranslatorGrammar
public IntArray getTerminalContexts(int ID)
LRTranslatorGrammar
getTerminalContexts
in interface LRTranslatorGrammar
public IntArray getNonTerminals()
LRTranslatorGrammar
IntArray
.getNonTerminals
in interface LRTranslatorGrammar
public String getNonTerminal(int ID)
LRTranslatorGrammar
null
if no such ID is known.getNonTerminal
in interface LRTranslatorGrammar
public int getGoalNonTerminal()
LRTranslatorGrammar
UNDEFINED_NONTERMINAL
is no such goal symbol has
been set.getGoalNonTerminal
in interface LRTranslatorGrammar
public IntArray getProductions()
LRTranslatorGrammar
IntArray
.getProductions
in interface LRTranslatorGrammar
public String getProduction(int ID)
LRTranslatorGrammar
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.getProduction
in interface LRTranslatorGrammar
public int getProductionNonTerminal(int ID)
LRTranslatorGrammar
productionID
or
UNDEFINED_PRODUCTION
if no such production is known.getProductionNonTerminal
in interface LRTranslatorGrammar
public IntArray getProductionSymbols(int ID)
LRTranslatorGrammar
IntArray
or null
if no such ID is known.getProductionSymbols
in interface LRTranslatorGrammar
public int getProductionLength(int ID)
LRTranslatorGrammar
UNDEFINED_PRODUCTION
if no such ID is known.getProductionLength
in interface LRTranslatorGrammar
public String toString()
toString
in class Object
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: INNER | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |