Package org.javacc.csharp
Class ParserCodeGenerator
- java.lang.Object
-
- org.javacc.csharp.ParserCodeGenerator
-
- All Implemented Interfaces:
org.javacc.parser.ParserCodeGenerator
class ParserCodeGenerator extends java.lang.Object implements org.javacc.parser.ParserCodeGeneratorGenerate the parser.
-
-
Field Summary
Fields Modifier and Type Field Description private intccolprivate intclineprivate org.javacc.utils.CodeBuilder.GenericCodeBuildercodeGeneratorprivate org.javacc.parser.Contextcontextprivate boolean[]firstSetAn array used to store the first sets generated by the following method.(package private) java.util.Hashtablegeneratedprivate intgensymindexprivate intindentamtprivate java.util.Map<org.javacc.parser.Expansion,java.lang.Integer>internalIndexesprivate java.util.Map<org.javacc.parser.Expansion,java.lang.String>internalNamesprivate intjj2Indexprivate booleanjj2LA(package private) org.javacc.parser.Expansionjj3_expansionprivate booleanlookaheadNeededprivate intmaskIndexprivate java.util.ListmaskVals(package private) intNOOPENSTMConstants used in the following method "buildLookaheadChecker".(package private) intOPENIF(package private) intOPENSWITCHprivate org.javacc.parser.ParserDataparserDataprivate static java.lang.StringparserTemplateprivate java.util.Listphase2listThese lists are used to maintain expansions for which code generation in phase 2 and phase 3 is required.private java.util.Listphase3listprivate java.util.Hashtablephase3tableprivate intswitchIndexprivate booleanxsp_declared
-
Constructor Summary
Constructors Constructor Description ParserCodeGenerator(org.javacc.parser.Context context)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description (package private) java.lang.StringbuildLookaheadChecker(org.javacc.parser.Lookahead[] conds, java.lang.String[] actions)This method takes two parameters - an array of Lookahead's "conds", and an array of String's "actions".(package private) voidbuildPhase1Routine(org.javacc.parser.BNFProduction p)(package private) voidbuildPhase2Routine(org.javacc.parser.Lookahead la)(package private) voidbuildPhase3Routine(Phase3Data inf, boolean recursive_call)(package private) voiddumpFormattedString(java.lang.String str)private voiddumpLookaheads(org.javacc.parser.Lookahead[] conds, java.lang.String[] actions)voidfinish(org.javacc.parser.CodeGeneratorSettings settings, org.javacc.parser.ParserData parserData)private voidgenerate3R(org.javacc.parser.Expansion e, Phase3Data inf)voidgenerateCode(org.javacc.parser.CodeGeneratorSettings settings, org.javacc.parser.ParserData parserData)private voidGenerateCodeProduction(org.javacc.parser.CodeProduction production, org.javacc.parser.CodeGeneratorSettings settings, org.javacc.utils.CodeBuilder codeGenerator)private voidgenFirstSet(org.javacc.parser.Expansion exp)Sets up the array "firstSet" above based on the Expansion argument passed to it.private java.lang.Stringgenjj_3Call(org.javacc.parser.Expansion e)(package private) java.lang.StringgenReturn(boolean value)private java.lang.StringgetTypeForToken()private intinternalIndex(org.javacc.parser.Expansion e)private java.lang.StringinternalName(org.javacc.parser.Expansion e)(package private) intminimumSize(org.javacc.parser.Expansion e)(package private) intminimumSize(org.javacc.parser.Expansion e, int oldMin)(package private) java.lang.Stringphase1ExpansionGen(org.javacc.parser.Expansion e)(package private) voidphase1NewLine()private voidprocessProductions(org.javacc.parser.CodeGeneratorSettings settings, org.javacc.utils.CodeBuilder.GenericCodeBuilder codeGenerator)(package private) voidsetupPhase3Builds(Phase3Data inf)
-
-
-
Field Detail
-
parserTemplate
private static final java.lang.String parserTemplate
- See Also:
- Constant Field Values
-
phase2list
private final java.util.List phase2list
These lists are used to maintain expansions for which code generation in phase 2 and phase 3 is required. Whenever a call is generated to a phase 2 or phase 3 routine, a corresponding entry is added here if it has not already been added. The phase 3 routines have been optimized in version 0.7pre2. Essentially only those methods (and only those portions of these methods) are generated that are required. The lookahead amount is used to determine this. This change requires the use of a hash table because it is now possible for the same phase 3 routine to be requested multiple times with different lookaheads. The hash table provides a easily searchable capability to determine the previous requests. The phase 3 routines now are performed in a two step process - the first step gathers the requests (replacing requests with lower lookaheads with those requiring larger lookaheads). The second step then generates these methods. This optimization and the hashtable makes it look like we do not need the flag "phase3done" any more. But this has not been removed yet.
-
phase3list
private final java.util.List phase3list
-
phase3table
private final java.util.Hashtable phase3table
-
maskIndex
private int maskIndex
-
jj2Index
private int jj2Index
-
lookaheadNeeded
private boolean lookaheadNeeded
-
maskVals
private java.util.List maskVals
-
gensymindex
private int gensymindex
-
indentamt
private int indentamt
-
jj2LA
private boolean jj2LA
-
codeGenerator
private org.javacc.utils.CodeBuilder.GenericCodeBuilder codeGenerator
-
cline
private int cline
-
ccol
private int ccol
-
context
private final org.javacc.parser.Context context
-
internalNames
private final java.util.Map<org.javacc.parser.Expansion,java.lang.String> internalNames
-
internalIndexes
private final java.util.Map<org.javacc.parser.Expansion,java.lang.Integer> internalIndexes
-
parserData
private org.javacc.parser.ParserData parserData
-
firstSet
private boolean[] firstSet
An array used to store the first sets generated by the following method. A true entry means that the corresponding token is in the first set.
-
NOOPENSTM
final int NOOPENSTM
Constants used in the following method "buildLookaheadChecker".- See Also:
- Constant Field Values
-
OPENIF
final int OPENIF
- See Also:
- Constant Field Values
-
OPENSWITCH
final int OPENSWITCH
- See Also:
- Constant Field Values
-
switchIndex
private int switchIndex
-
xsp_declared
private boolean xsp_declared
-
jj3_expansion
org.javacc.parser.Expansion jj3_expansion
-
generated
java.util.Hashtable generated
-
-
Method Detail
-
generateCode
public void generateCode(org.javacc.parser.CodeGeneratorSettings settings, org.javacc.parser.ParserData parserData)- Specified by:
generateCodein interfaceorg.javacc.parser.ParserCodeGenerator
-
finish
public void finish(org.javacc.parser.CodeGeneratorSettings settings, org.javacc.parser.ParserData parserData)- Specified by:
finishin interfaceorg.javacc.parser.ParserCodeGenerator
-
GenerateCodeProduction
private void GenerateCodeProduction(org.javacc.parser.CodeProduction production, org.javacc.parser.CodeGeneratorSettings settings, org.javacc.utils.CodeBuilder codeGenerator)
-
processProductions
private void processProductions(org.javacc.parser.CodeGeneratorSettings settings, org.javacc.utils.CodeBuilder.GenericCodeBuilder codeGenerator)
-
internalName
private java.lang.String internalName(org.javacc.parser.Expansion e)
-
internalIndex
private int internalIndex(org.javacc.parser.Expansion e)
-
genFirstSet
private void genFirstSet(org.javacc.parser.Expansion exp)
Sets up the array "firstSet" above based on the Expansion argument passed to it. Since this is a recursive function, it assumes that "firstSet" has been reset before the first call.
-
dumpLookaheads
private void dumpLookaheads(org.javacc.parser.Lookahead[] conds, java.lang.String[] actions)
-
buildLookaheadChecker
java.lang.String buildLookaheadChecker(org.javacc.parser.Lookahead[] conds, java.lang.String[] actions)This method takes two parameters - an array of Lookahead's "conds", and an array of String's "actions". "actions" contains exactly one element more than "conds". "actions" are Java source code, and "conds" translate to conditions - so lets say "f(conds[i])" is true if the lookahead required by "conds[i]" is indeed the case. This method returns a string corresponding to the Java code for: if (f(conds[0]) actions[0] else if (f(conds[1]) actions[1] . . . else actions[action.length-1] A particular action entry ("actions[i]") can be null, in which case, a noop is generated for that action.
-
dumpFormattedString
void dumpFormattedString(java.lang.String str)
-
buildPhase1Routine
void buildPhase1Routine(org.javacc.parser.BNFProduction p)
-
phase1NewLine
void phase1NewLine()
-
phase1ExpansionGen
java.lang.String phase1ExpansionGen(org.javacc.parser.Expansion e)
-
buildPhase2Routine
void buildPhase2Routine(org.javacc.parser.Lookahead la)
-
genReturn
java.lang.String genReturn(boolean value)
-
generate3R
private void generate3R(org.javacc.parser.Expansion e, Phase3Data inf)
-
setupPhase3Builds
void setupPhase3Builds(Phase3Data inf)
-
getTypeForToken
private java.lang.String getTypeForToken()
-
genjj_3Call
private java.lang.String genjj_3Call(org.javacc.parser.Expansion e)
-
buildPhase3Routine
void buildPhase3Routine(Phase3Data inf, boolean recursive_call)
-
minimumSize
int minimumSize(org.javacc.parser.Expansion e)
-
minimumSize
int minimumSize(org.javacc.parser.Expansion e, int oldMin)
-
-