Package exc.block
履歴:
このパッケージは、tree構造を持つXcodeの文などを解析・コード変換するためのデー
タ構造を表現するクラスを含む。
-
基本となるデータ構造は、Blockである。以下のような構造をしている。
- 各Blockは、Basic Blockを持つことができる。Basic Blockは分岐を持たない
複数の文と条件式を表現する。
- 条件式として用いる式は、Basic Blockの条件式(Cond Expr)に設定して
おかなくてはならない。
- Basicブロック内の文は、Statementオブジェクトを通してアクセスする。
Statmentオブジェクトは文の列に対するイタレータとして用いる。
- ネストする構造を持つ場合には、そのbody部を表現するために、
BlockListを持つことができる。
- BlockList は 複数のBlockからなる列を表現する。
- BlockListは、Compound statementに対応する構造も表現しており、
シンボルテーブルを格納している。
- 関数定義XobjectDefやXobjectからBlockへは、
Bcons.buildFunctionBlockまたは、Bcons.buildBlockを用いて変換する。クラ
スBconsは、コンストラクタを集めたstaticなmember関数のクラスで、文に対
応するBlock構造を作ることができる。Xobjectへは、Blockのメンバ関数
toXobjectをつかって行う。
- これらの構造はBlockIteratorを使って、トラバースすることがで
きる。BasicBlockをトラバースする場合には、BasicBlockIteratorを用いる。
クラス階層:
Block (exc.block.Block)
制御構造を表現するブロックのsuper class。
サブクラスに対するabstract classとして用いる(実際にabstract classには
なっていない)。それぞれのブロックの生成には、Bconsクラスを利用してもよ
い。PropObjectのsubclassで、Proplistが使える。
- constructor:
public Block(int code,BasicBlock bblock)
- method:
public int Opcode()
ブロックで表現する文のOpcodeを返す。
public int Id()
Idを返す。
public BasicBlock getBasicBlock()
このブロックに含まれるBasic Blockを返す。
public Block getNext()
このブロックを含むBlockList中で、このブロックの次のブロックを返す。
public Block getPrev()
このブロックを含むBlockList中で、このブロックの前のブロックを返す。
public BlockList getParent()
このブロックを含むBlockListを返す。
public Block getParentBlock()
このブロックを含むBlockを返す。
-
public Block add(Block s)
-
public Block add(BasicBlock bb)
-
public Block add(Xobject s)
このブロックを含むBlockListに、ブロックをこのブロックの直後に挿入する。
-
public Block insert(Block s)
-
public Block insert(BasicBlock bb)
-
public Block insert(Xobject s)
このブロックを含むBlockListに、ブロックをこのブロックの直前に挿入する。
-
public void replace(Block b)
このブロックを含むBlockListで、このブロックをbで置き換える。
public Block remove()
このブロックを含むBlockListから、このブロックを削除する。
public Ident findIdent(String name)
このブロックから、見えるnameを持つシンボルテーブルのエントリを検索する。
public abstract BlockList getBody()
public abstract void setBody(BlockList s)
public abstract BasicBlock getCondBBlock()
public abstract BlockList getThenBody()
public abstract BlockList getElseBody()
public abstract void setThenBody(BlockList s)
public abstract void setElseBody(BlockList s)
public abstract BasicBlock getInitBBlock()
public abstract BasicBlock getIterBBlock()
public abstract void setInitBBlock(BasicBlock s)
public abstract void setIterBBlock(BasicBlock s)
サブクラスに対するabstract method。実際にはabstractではないが、
overrideして用いる。
public abstract Xobject toXobject()
ブロックをXobjectに直す。
public static int numberOfBasicBlock()
public static int numberOfBlock()
SimpleBlock (exc.block.SimpleBlock)
Bodyを持たない単純なBlockを表現するクラス。
- constructor:
public SimpleBlock(int code,BasicBlock bblock)
Basic Block bblockを持つブロックを作る。
public SimpleBlock(int code)
空のBasic Blockを持つブロックを作る。
IfBlock (exc.block.IfBlock)
If文を表現するクラス。Opcode()は、Xconde.IF_STATEMENTになっている。
then部とelse部の2つのbodyを持つ。
- constructor:
public IfBlock(BasicBlock cond,
BlockList then_part,
BlockList else_part)
then部とelse部のBodyとなるBlockListを与えて、IfBlockを作る。
- method:
public BasicBlock getCondBBlock()
条件部のBasic Blockを返す。
public void setCondBBlock(BasicBlock bb)
条件部のBasic Blockをセットする。
public BlockList getThenBody()
then部のbodyを返す。
public BlockList getElseBody()
else部のbodyを返す。
public void setThenBody(BlockList s)
then部のbodyをセットする。
public void setElseBody(BlockList s)
else部のbodyをセットする。
CondBlock (exc.block.CondBlock)
条件部とbodyを持つBlockを表現するクラス。
Opcode()は、Xcode.WHILE_STATEMENT, Xcode.DO_STATEMENT,
Xcode.SWITCH_STATEMENT である。
- constructor:
public CondBlock(int code,
BasicBlock cond,
BlockList body)
- method:
public BlockList getBody()
bodyを返す。
public void setBody(BlockList s)
bodyをセットする。
public BasicBlock getCondBBlock()
public void setCondBBlock(BasicBlock bb)
ForBlock (exc.block.ForBlock)
For文を表現するブロック。初期化文、条件部、繰り返し部の3つのBasic
Blockをもつ。Opcode()はXcode.FOR_STATEMENTである。
CondBlockのサブクラス。正規化されたfor文とは、
一つの整数型のループ変数varに関して、以下のような形に変形できるループで
ある。
for(var = lb; v relop up; v += step) body
だだし、relopは<, <=, >, >= のいずれか。Cannonialize()で正規化する。
正規化できたループの場合は、isCannonnicalize()でtrueを返す。
- constructor:
public ForBlock(BasicBlock init,
BasicBlock cond,
BasicBlock iter,
BlockList body)
- method:
public BasicBlock getInitBBlock()
初期部のBasic Blockを返す。
public BasicBlock getIterBBlock()
繰り返し部のBasic Blockを返す。
public void setInitBlock(BasicBlock s)
初期部のBasic Blockをセット。
public void setIterBlock(BasicBlock s)
繰り返し部のBasic Blockを返す。
public void Cannonicalize()
For文を正規化する。
public boolean isCannonical()
For文を正規化されたブロックかどうかを返す。
public Xobject getInductionVar()
正規化されたForブロックのループ変数を返す。
public Xobject getLowerBound()
正規化されたForブロックの下限値(初期値)を返す。
public Xobject getUpperBound()
正規化されたForブロックの上限値(終値)を返す。
public Xobject getStep()
正規化されたForブロックのステップ値(刻幅)を返す。
public void setLowerBound(Xobject x)
正規化されたForブロックの下限値(初期値)をセットする。
public void setUpperBound(Xobject x)
正規化されたForブロックの上限値(終値)をセットする。
public void setStep(Xobject x)
正規化されたForブロックのステップ値(刻幅)をセットする。
LabelBlock (exc.block.LabelBlock)
ラベルとなるXobjectをもつブロックを表現する。
Opcodeが、GOTO_STATEMENT,STATEMENT_LABELの場合は、そのXobjectは(IDENT
label)で、CASE_LABELの場合は、整数値のXobjectとなる。
- constructor:
public LabelBlock(int code,
Xobject label)
labelをもつLabelBlockを作る。空なBasic Blockをもつ。
- method:
public Xobject getLabel()
ラベルを返す。
public void setLabel(Xobject x)
ラベルをセットする。
CompoundBlock (exc.block.CompoundBlock)
Compound 文に対するブロック。BasicBlockはない(null)。
- constructor:
public CompoundBlock(BlockList body)
bodyを持つBlockを作る。OpcodeはCOMPOUND_STATEMENTとなる。
public CompoundBlock(int opcode,BlockList body)
bodyを持つBlockを作る。Opcodeを指定する。
- method:
public BlockList getBody()
bodyを返す。
public void setBody(BlockList s)
bodyをセットする。
PragmaBlock (exc.block.PragmaBlock)
OpenMPなどのPragmaに対するブロック。CompoundBlockのサブクラス。
- constructor:
public PragmaBlock(int code,
int pragma,
Xobject args,
BlockList body)
codeは、Pragmaブロックに対するcode。現在、Xcode.OMP_PRAGMAがある。
pragma, argsはpragmaに対する情報で、pragmaによる。
- method:
public int getPragma()
public Xobject getClauses()
それぞれの引数情報を返す。
FunctionBlock (exc.block.FunctionBlock)
関数のブロックを表現するBlock。CompoundBlockのサブクラス。
- constructor:
public FunctionBlock(String name,
Xobject id_list,
Xobject decls,
Block body_block,
XobjectFile env)
関数名nameのブロックを作る。id_listとdeclsはパラメータに対するシンボル
テーブルと宣言リストである。envにこの関数があるファイルに対する
XobjectFileを与える。
- method:
public String getName()
関数名を返す。
public XobjectFile getFile()
関数の属するファイルに対するXobjectFileを返す。
BlockList (exc.block.BlockList)
ブロックの並びを表現するクラス。ブロックの本体(body)に使う。
- constructor:
public BlockList()
空のBlockListを作る。
public BlockList(Block b)
一つだけBlockをもつBlockListを作る。
public BlockList(Xobject id_list,
Xobject decls)
シンボルテーブルid_listと変数宣言declsをもつ空のBlockListを作る。
- method:
public Block getTail()
先頭のブロックを返す。
public Block getHead()
最後のブロックを返す。
public Block getParent()
このBlockListをbodyとして持つブロックを返す。
public BlockList getParentList()
このBlockListをbodyとして持つブロックを含むBlockListを返す。
public boolean isEmpty()
このBlockListが空か。
public boolean isSingle()
このBlockListが一つだけのブロックを持つかどうか。
public void add(Block b)
public void add(BasicBlock bb)
public void add(Xobject x)
BlockListの末尾にブロックを付け加える。
public void insert(Block b)
public void insert(BasicBlock bb)
public void insert(Xobject x)
BlockListの先頭にブロックを付け加える。
public Xobject getIdentList()
シンボルテーブルを返す。
public Xobject getDecls()
変数宣言リストを返す。
public Ident findLocalIdent(String s)
このbodyで宣言されているシンボルテーブルエントリを返す。
もしも、みつからなければ、nullを返す。
public Ident findLocalIdent(Ident id)
このidが宣言されているかどうか。
public void addIdent(Ident id)
このBlockListのシンボルテーブルにidを加える。
Bcons (exc.block.Bcons)
Blockを作るためのコンストラクタを提供するクラス。
全て、staticのメンバー関数となっている。
- method:
public static Block Statement(Xobject x)
一つだけの文xをもつブロックを作る。
public static Block Cond(Xobject x)
条件式xをもつブロックを作る。
public static Block BasicBlock(BasicBlock bb)
一つだけのBasic Blockを持つブロックを作る。
public static BlockList emptyBody()
空のBlockListを作る。
public static BlockList emptyBody(Xobject id_list,
Xobject decls)
シンボルテーブルと変数宣言を持つ空のBlockListを作る。
public static Block COMPOUND(BlockList b_list)
public static Block PRAGMA(int code,
int pragma,
Xobject args,
BlockList body)
public static Block IF(BasicBlock cond,
BlockList then_part,
BlockList else_part)
public static Block IF(Xobject cond,
Block then_part,
Block else_part)
public static Block FOR(BasicBlock init,
BasicBlock cond,
BasicBlock iter,
BlockList body)
public static Block FOR(Xobject init,
Xobject cond,
Xobject iter,
Block body)
public static Block WHILE(BasicBlock cond,
BlockList body)
public static Block WHILE(Xobject cond,
Block body)
public static Block DO(BlockList body,
BasicBlock cond)
public static Block DO(Block body,
Xobject cond)
public static Block SWITCH(BasicBlock cond,
BlockList body)
public static Block SWITCH(Xobject cond,
Block body)
public static Block BREAK()
public static Block CONTINUE()
public static Block GOTO(Xobject label)
public static Block LABEL(Xobject label)
public static Block CASE(Xobject label)
public static Block DEFAULT_LABEL()
public static Block RETURN()
public static Block RETURN(BasicBlock ret)
public static Block RETURN(Xobject ret)
public static Block buildFunctionBlock(XobjectDef d)
関数定義からブロックの構造を作る。
public static Block buildBlock(Xobject v)
Xobjectからブロックを作る。
BlockIterator (exc.block.BlockIterator)
ブロックの構造をトラバースするためのイタレータのためのabstract class。
サブクラスとして、topdownBlockIteratorとbottomBlockIteratorがある。
- constructor:
public BlockIterator(Block b)
- method:
public abstract void init()
初期化する。
public abstract void init(Block b)
ブロックbを設定して、初期化する。
public abstract void next()
次に進む。
public abstract boolean end()
最後かどうか。
public abstract int size()
いくつのブロックをトラバースするか。
public Block getBlock()
現在のブロックを得る。
public void setBlock(Block b)
現在のブロックをbで置き換える。
topdownBlockIterator (exc.block.topdownBlockIterator)
ブロックをトップダウンにトラバースするイタレータ。BlockIteratorのサブ
クラス。
- constructor:
public topdownBlockIterator(Block b)
bottomBlockIterator (exc.block.bottomupBlockIterator)
ブロックをボトムアップにトラバースするイタレータ。BlockIteratorのサブ
クラス。
- constructor:
public bottomBlockIterator(Block b)
BlockOutputStream (exc.block.BlockOutputStream)
デバックのためにブロックをインデントしてプリントアウトするためのクラス。
XobjectOutputStreamのサブクラス。
- constructor:
public BlockOutputStream(OutputStream out)
- method:
public void print(Block b)
BasicBlock (exc.block.BasicBlock)
制御文を含まない文の列(基本ブロック)を表現するクラス。
PropObjectのsubclassで、Proplistが使える。
- constructor:
public BasicBlock()
空のBasic Blockを作る。
- method:
public int Id()
public Block getParent()
このBasic Blockを含むBlockを返す。
public Statement getHead()
先頭の文を返す。
public Statement getTail()
末尾の文を返す。
public Xobject getExpr()
条件式を返す。
public void setExpr(Xobject x)
条件式をセットする。
public void add(Statement s)
public void add(Xobject statement)
文を最初に加える。
public void insert(Xobject statement)
public void insert(Statement s)
文を末尾に加える。
public boolean isEmpty()
このBasic Blockが空か。
public boolean isSingle()
このBasic Blockが一つだけの文を持つかどうか。条件文がある場合には、
falseを返す。
public static BasicBlock Cond(Xobject x)
条件式にxがセットされたBasic Blockを作る。
public static BasicBlock Statement(Xobject x)
文xからなるBasic Blockを作る。
public Xobject toXobject()
Xobjectに変換する。
Statement (exc.block.Statement)
Basic Block内の文を表現するクラス。文に関するイタレータとして用いる。
- constructor:
public Statement(Xobject statement)
- method:
public BasicBlock getParent()
この文が含まれるBasicBlockを返す。
public Statement getNext()
この文の直前の文を返す。
public Statement getPrev()
この文の直後の文を返す。
public Xobject getExpr()
この文のXobjectを返す。
public void setExpr(Xobject x)
この文のXobjectをセットする。
public void remove()
この文を含むBasicBlockから取り除く。
public Statement add(Xobject x)
public Statement add(Statement s)
この文の直前に文を加える。あたらに加わった文を返す。
public Statement insert(Xobject x)
public Statement insert(Statement s)
この文の直後に文を加える。あたらに加わった文を返す。
BasicBlockIterator (exc.block.BasicBlockIterator)
Block内のBasic Blockをトラバースするためのイタレータ。
- constructor:
public BasicBlockIterator(Block b)
- method:
public abstract void init()
初期化する。
public abstract void init(Block b)
ブロックbを設定して、初期化する。
public abstract void next()
次に進む。
public abstract boolean end()
最後かどうか。
public abstract int size()
いくつのブロックをトラバースするか。
public BasicBlock getBasicBlock()
現在のブロックを得る。