                                      2005/7/12
@huD@L\̊Tv
@@@@@@@@@@@@@@@@@@@2004/5/23, 6/9, 8/16
@@@@@@@@@@@@@@@@@@@(##25): 2004/08 
@@@@@@@@@@@@@@@@@@@(##24): 2004/05-6 
@@@@@@@@@@@@@@@@@@@(##21): 2003/06 
@@@@@@@@@@@@@@@@@@@(##14): 2002/06 
@@@@@@@@@@@@@@@@@@@(##9) : 2001/10 
PD@S̍\

iPj
@\[XvOɌϐ╛vOA^A萔Ȃǂ̏AȂ
тɁARpC̐ꎞϐ⃌WX^ȂǁAX̋L̏͋L
\ɕێBԂ̋LłĂXR[vقȂƕʕƂ邽
߂ɁAvOȂǁAVXR[vĴɑΉāAŐV
ɒ`LiSymj[߂L\iSymTablejB
@@XR[vA̋L\iSymTablejF
@@@@XR[vAŒ`LiSymj[߂\
L̒TAo^̍ۂ́AvŐǏIȕϐ⃌WX^Ȃǂ[
߂L\AIȕϐ╛vOȂǂ[߂L\ȂǁAXR[v
̓q֌WȂA͌̕@ɏ]ċL̓sȂB萔
̓RpCPʑŜANZXł萔pL\ɓo^(##9)B
@RpCPʑŜőIɒ`ꂽL[߂L\
@@b[[vOAŋǏIɒ`ꂽL[߂L\
@@b@@@b[[vOA̓̃XR[vŒ`ꂽL[
L\
@@b@@@@@@c
@@b[[vOBŋǏIɒ`ꂽL[߂L\
@@b[[@c
[[
@͌ꂪC̏ꍇAL\̊Kŵ͎悤ɂȂB@(##9)
symTableConst@@萔i\[XvOɌ̂
@@@@@@@@@@@@RpC̐́jB
symTableRoot @@HIRɔt̋Li{^Ȃǁj
  |          @@RpCPʑŜŒ`ꂽLB
  |- symTable A@@vOAŋǏIɒ`ꂽLA
  |@|@@@@@@@vOAŃRpC
  |@|@@@@@@@i萔ȊÓjLB
  |@|- symTable A_b1@@vOA̒
  |@@@|@@@@@@@@ubNb1Œ`ꂽLB
  |@@@|- symTable A_b1_2@ubNb1̒̃ubNb1_2
  |                        @`ꂽLB
  |@@@@@@c
  |- symTable B@@vOBŋǏIɒ`ꂽLA
  |@|@@@@@@@vOBŃRpC
  |@|@@@@@@@i萔ȊÓjLB
  |@@@c
]]

@L\̋LڍiGgĵ́ASymC^tF[Xvar(), 
subp(), label()Ȃǂ̃t@Ng\bhĂōsȂBnewŒڂɃC
X^X̂ւĂ킯ł͂ȂAnewŒڂɍƂ́A
̂߂̖񑩎\čȂƁA݊֘Aɕs\
̂ŁA͊߂ȂB(##14)
@LIRł͌^XR[v̏񂪑啝ɊȒPĂ̂ŁAobNG
hŕKvƂ݂̂LڂLIRpL\B{dlł́AHIR
p̋L\ɂĐB@(##24)

iQjHIRƃt[Ƃ̊֘A
@HIRł́Aϐ╛vOAxȂǂ́AʏAꂪL\̂ǂ
ɋLڂĂ邩QƎqireferencejƂĕ\B̌^
⑼̋LƂ̊֌WȂǁAX͎̏QƎqċL\o
悤AANZX\bhpӂB
@t[̕\ł́Aϐ⃌WX^ȂǂL\̎QƎqƂĕ\
Ƃ邪Af[^t[ƂȂǂ́AɈӓIȎʔ
t^āA̔ԍŎƂB̏ꍇAQƎq环ʔԍ
߂郁\bhAʔԍQƎq߂郁\bhȂǂpӂB

iRjL̃NXKw
@LiSymj́Aꂪۂ̃IuWFNgƂčƂ́Aϐ
iVarjAvOiSubpjA^iTypejA萔iConstjAxiLabeljA
WX^iRegjȂǂ̃TuNX̃IuWFNgƂčB
TuNXɂ́AɊ̃TuNXɕ̂B̃N
X̊Kw֌WɎB

  Sym // Symbol class (super class of all symbol classes).
    | //  Symbols in the same scope are contained in the same
    | //  symbol table (instance of SymTable).
    |
    |- OperandSym // Symbol that may be an operand
    |   |         //  of executable expressions.
    |   |
    |   |- Var   // Variable that can be assigned a value 
    |   |   |    //  and variable with const attribute.
    |   |   |- Param // Formal parameter class.
    |   |   |- Elem  // Class for structure element, 
    |   |            //  union element, etc.
    |   |
    |   |- Const // Constant class
    |   |   |- IntConst    // integer constant
    |   |   |- FloatConst  // floating constant 
    |   |   |- CharConst   // character constant 
    |   |   |- StringConst // string constant 
    |   |   |- BoolConst   // boolean constant 
    |   |   |- NamedConst  // Named constant including 
    |   |             //  enumeration constant (other than bool).
    |   |- Label  // Statement label class.
    |
    |- Subp  // Subprogram class (procedures, functions, etc.) 
    |
    |- Type  // Type information class.
    |    |- BaseType    // Base types intrinsic 
    |    |              //  to many programming languages.
    |    |- VectorTyepe // Vector (1 dim. array) type.
    |    |- EnumType    // Enumaration type. 
    |    |- PtrType     // Pointer type. 
    |    |- StructType  // Structure type. 
    |    |- UnionType   // Union type. 
    |    |- SubpType    // Subprogram type. 
    |    |- RegionType  // Region type to define storage area //##24
    |    |              //   shared between subprograms.
    |    |- DefinedType // Types defined in a program (by typedef).
    |
    |- ExpId  // Expression identifier 
              //   (generated to be used in data flow analysis, etc.)

QD@vȋLړe

@L\ɋLڂꂽ́AׂāAANZX\bhĎQƂȂ
ݒ肷BAANZX\bhƂP΂PɑΉĎۂ̃tB[h
Ƃ͌ȂBLڍڊԂ̐ۂ߂ɁAP̃\bh
̃tB[hݒ肷邱ƂANX̃ANZX\bh̃NX
̃tB[hĒlZo邱ƂȂǂBāAANZX\
bhɎĂtB[h𒼐ڂɌ邱Ƃ́AgԈႢ
Ƃ₷AƂȂ₷B̓IȃANZX\bhɂ
ẮASymC^tF[XTypeC^tF[XAȂтɂ̉ʂ̃C
^tF[XQƂꂽB
@񉻂œKł́Az񂪏dvȑΏۂƂȂBźAʂɂ͂Pz
łxN^[A邢̓xN^[̃xN^[AEEEƂĒ`ł邪A
̂悤ɂĒ`zɂ͎X̌`Ԃ̂ŁA
@@@傫Œ̒`z
@@@傫Ŏw肷conformant array
@@@UxN^[iĂƂ͌ȂxN^[̏W܂A
@@@@@@@@@@JavȃzȂǁj
@@@̑̌`Ԃ̔z
̂ł邩ĂA񉻂œK̑ΏۂF₷悤
ɂB

iPjS̋LɋʂȓeiSymj
@@O̒ԂigetName()j
@@L̎ށiϐAvOAcA getSymKind()j
@@^igetSymType()œB^ȂivoidȂj
@@@@Lɑ΂ĂnullԂBj
@@`ʒui̋Lŏɐ錾sAgetDefinedLine(), 
getDefinedFile()j
@@ӖiRpCPʑŜňӂȖOAO̒Ԃɓ̂̂
@@@@Lɑ΂ẮARpCd邽߂̖O𐶐
@@@@getUniqueName()BSymTablesetUniqueNameToAllSym()
@@@@Ă΂ꂽɗLƂȂBj
@@tF[Yʏȉ̏jւ̃NigetWork()j

iQjϐiVarj
@@l̎igetInitialValue()j
@@ݒEQƃXg̃f[^t[
@@igetDefUseList() etc. in FlowAnalSymj
i2-1jƗϐiłvfłȂϐj
@@iextern, public, private, ...jwigetVisibility()j
@@Liauto, static, registerjwigetStorageClass()j
i2-2jiParamj
@@Ԗڂ̉igetParamIndex()j
@@call-by-value, call-by-reference̋
i2-3jvfi\́Ap̂́jiElemj
@@@@@@[[@\̕ϐAp̕ϐ̊evfƂɍ쐬
@@ψʁiψʂ͎Ƃĕ\\AevaluateDisp()j
@@̗vf܂ލ\̂܂͋ṕigetUpperType()j
@@rbgtB[hۂArbgtB[h̏ꍇ͂̃rbg

iRjvOiSubpj
@@ԋpľ^igetReturnValueType()j
@@XgigetParamList()jA
@@ψXg̗LigetOptionalParam()j
@@ǏϐL\igetSymTable()j
@@ԕ\؁igetSubpDefinition()j
@@xXgigetLabelDefList()j
@@Ăяo惊XgigetCallList()j
@@{ubÑOtigetEntyBBlock()j
@@f[^t[ւ̃NigetSubpFlow()j
@@tF[YʏigetFlowInf(), ... j
@@@@e̓tF[Yʂɒ`AtF[YԂŎ󂯓n\
@@oꂽ̐igetErrorCount()j
@@
iSj^iTypej
@@TCYioCgjigetSizeValue()j
@@TCYZoigetSizeExp()j
@@constC̗LiisConst()j
@@volatileC̗LiisVolatile()j
i4-1j{^iBaseTypej
@@{^R[hiǂ̊{^\jigetTypeKind()j
i4-2jxN^[iVectorTypej
@@vf̌^igetElemType()j
@@vfigetElemCount()j
@@vfZoigetElemCountExp()j
@@CfbNXnligetLowerBound()j
@@Œ蒷̒`z񂩔ۂiisRectangularArray()j
i4-3j񋓌^iEnumTypej
@@񋓎q̏igetEnumSeqNumber()j
i4-4j|C^iPtrTypej
@@|Cǧ^igetPointedType()j
i4-5j\́iStructTypej
@@vf̃XgigetElemList()j
i4-6jṕiUnionTypej
@@vf̃XgigetElemList()j
i4-7jvO^iSubpTypej
@@̌^̃XgigetParamTypeList()j
@@ψ̗LihasOptionalParam()j
@@ԋpľ^igetReturnType()j
i4-8j^itypedefŖꂽ^jiDefinedTypej
@@Ƃ̌^igetOrigin()j

iTj萔iConstj
i5-1j萔iIntConstj
@萔getName()œ\L`́Auԕ\̌^ƈӖv
Ő悤ɁA^ʂ邽߂̐ڔiȂ\UAlong\
LAlong long\LLj(##21)B萔Javalongŕ\
\lishortValue(), intValue(), longValue()jBAl
Javalongŕ\ł͈͂zĂꍇ́AisOutOfValueRange()
trueԋpA\lȂB
i5-2j_萔iFloatConstj
@_萔getName()œ\L`́Auԕ\̌^
ƈӖvŐ悤ɁA^ʂ邽߂̐ڔifloat\FA
double\Dj(##21)B_萔Javadoubleŕ\
\lifloatValue(), doubleValue()jBAlJava
doubleŕ\ł͈͂zĂꍇ́AisOutOfValueRange()true
ԋpA\lȂB
i5-3j萔iCharConstj
@萔͕̗[Ɉpi'j\LB萔̓
\ĺAɑΉint̓\lA܂unsigned charint
ϊ\lƂB
i5-4j萔iStringConstj
@̕\LɂẮA͌ɂĊJnÏip\0
jGXP[v肷邪Aĕ\
̗̂̂񂩂Ȃ̂𕶎{(string body)ƌĂԂƂɂƁAHIR
ł͕萔̓\͕{̂̑OɈpi"j`
B͌̕萔𕶎{̂ɕϊ郁\bh(makeStringBody)
A{̂͌̕萔ɕϊ郁\bh(makeCstring)
́ASourceLanguageNXɗpӂBԕ\󎚏o͂Ƃ̓R
pCLqłJava̕\L`ɍ킹Ĉ󎚂B@(##25)
@@{́igetStringBody()j
@@igetLength()j

iUjxiLabelj
@@HIRɂ邱̃x̂ւ̃NigetHirPosition()j

iWjRegionType@@##24
@RegionTypéAFortranCOMMON̂悤ɁARpCPʊԂŋL
Lꏊiʗ̈j`ŴłBTOIɂ́A͕v
OƂɗvf`鋤p̂̂悤Ȃ̂ł邪AP̃RpC
Pʂ̒ł́AS̕vOȂ̂ŁAsSȂ܂܂̌^
ANɂׂĂ̗vfɏ߂ĊSȌ^ƂȂB
āA͋p̂̂悤ɗvf񋓂`ł͂ȂAistructunion
tagɑjregion̂ɂĕ\B
@RegionTypéAvOƋL\̑΂̃Xg𑮐ƂĂB
̋L\́AΉ镛vOɂ鋤ʗ̈\ϐ̐錾
ȂBP̕vO̓ł́Aʗ̈structƗގ
A\ϐstruct̗vfƓl̈B
@\bh̏ڍׂɂẮASymC^tF[XregionType\bhƁA
RegionTypeC^tF[XŒ`ꂽ\bhQƂꂽB

RD@L\̎g

RDP@L\̍
@܂ARpC̏̈ƂāARpCPʑŜɋʂ
LsymTableRootƁA萔symTableConstB

@@@symRoot.symTableRoot
vO`̂Ƃɂ́A̒ŋǏIɎgLL\
pushSymTableipushjɂčAvOIɂɑ
popSymTableNipopjBvO̒ŐVXR[
vn܂鎞i錾܂ރubNȂǂ̎jɂ́ÃXR[vł̋Ǐ
ILL\pushSymTableōÃXR[voƂ
popSymTablesB
popSymTabléAłŋpushSymTableƂ炠ƂɒǉꂽL
p̂ł͂ȂAȌ̒ǉʒu߂̂łāA쐬ꂽL\
͕ۑĂBāAL\̓c[\ƂB
@L\ÂƂpushɂL\A1A1A̎qƂȂBA1
̂ƂpushɂL\A11AA11popƁApushŋL\
A12ƂBL\̂ƂpushōꂽL\́AZƂ
BA12popƁAA1popÂpushA2ƁAA2
A1̌ZƂȂBL̏ꍇAL\
    A -- A1 -- A11
      |     |- A12
      |- A2
ƂKw\ȂBP̃RpCPʂɊ܂܂evOɑ
ďL̂ƂJԂƁAL\̃c[\BL\̃c[
PPǂ郁\bhƂẮÂ̂B
    getParent        thisŎL\Ƃ̐e̋L\
߂
    getFirstChild    thiŝƂōŏɍꂽL\߂
    getBrother       thisƓêƂŎɍꂽL\߂
@L\ɂ́ȀL҂L^igetOwner()jBvŐǏ
L^L\̏L҂͂̕vOł邪Aʂɂ́A
L\̉ɂɕʂ̋L\BsymTableRootsymTableConst
̏L҂nullłB

RDQ@L\̏
@L֘A̋ʏ߂NXSymRoot̃CX^XƁA
initiate()ɂďƁARpCPʑŜɋʂL
symTableRootƁA萔symTableConstB
ƂAsymTableRootɂHIR̊{^Ȃǂ̔tLLڂBi
ԊÓjvȌJnƂ́AsymTableRoot̂Ƃł
̕vOŋǏIɒ`Lp̋L\BSymRootɂ́A
symTableRoot, symTableConst̑ɁA̋L\t@XB
    symTableCurrent     ݏ̍ł̃XR[vɑ΂L\
    symTableCurrentSubp ݏ̕vŐL\
t[͂œKA񉻕ϊ̂ƂAsymTableCurrent
symTableCurrentSubpK؂ɐݒ肵ĂȂƋL\֘Ã\bh
ȂƂB̋L\́A
@@symRoot.symTableRoot
@@symRoot.symTableCurrent
@@symRoot.symTableCurrentSubp
̂悤ɂĎQƂłB@(##24)

RDR@L̍@##24
@L\ɓĹAnewgĒڂɃRXgN^Ăяô
͂ȂAL쐬t@Ng[\bhgāA
@@symRoot.sym.defineVar(ϐ, ^)
@@symRoot.sym.defineSubp(vO, ^)
@@symRoot.sym.defineLabel(x)
@@EEE
̂悤ɂčBڂSymC^tF[XQƂꂽB
@œKȂǂ̍ۂɈꎞϐxȂǂɂ́A
@@symRoot.symTableCurrentSubp.generateVar(^)
@@symRoot.symTableCurrentSubp.generateLabel()
̂悤ɂBڂSymTableC^tF[XQƂꂽB

RDS@Iterator
@L\symTableA̒̋L
    SymIterator lSymIterator = symTableA.getSymIterator();
ŁA
    lSymIterator.next()
ƌJԂƂɂĎQƂłB
    lSymIterator.nextVar()
ƂƁAϐiVar, Param, Elemĵ݂XƏoĂāAϐȊŐL
̓XLbvBIteratorgȂꍇ́A
    Sym lSym1, lSym;
    lSym1 = symTableA.getFirstSym();
    lSym  = lSym1.getNextSym();
̂悤ɁAL\̍ŏ̋LogetFirstSym()ƁAL̎
LogetNextSym()gāAXƎQƂ邱ƂłB
    SymNestIterator lSymNestIterator = symTableA.getSymNestIterator();
ƂƁA
    lSymNestIterator.next()
̂悤ɂƁAw肵L\isymTableAjƂ̉ʂׂ̂Ă̋L\
SāAɊ܂܂LQƂ邱ƂłB̂ƂA
next()̑
    lSymNestIterator.nextVar()
gƁAsymTableAƂ̉ʂׂ̂Ă̋L\Ɋ܂܂ϐQ
邱ƂłB


--------
󋵁F
Ewchar, wstring 

폜
@HIRLIRł̋L\̋L@##24
  Reg, MReg, AReg̋Lq@050712

