org.oklab.compiler.syntaxtree
クラス Node

java.lang.Object
  上位を拡張 org.oklab.compiler.syntaxtree.Node
直系の既知のサブクラス:
Expression, Scope, Statement

public abstract class Node
extends java.lang.Object

シンタックスツリー(構文木)の基盤となるクラス. このクラスは構文木の基盤となるクラスで、継承されることを前提に作っている. 構文木で共通化できるメソッドなどはこのクラスで実装する.またサブパッケージ内 の各クラスに当てはまるものであれば、このプログラミング言語の文法となる. 以下がサブパッケージの概要である.

導入されたバージョン:
1.0
バージョン:
1.01
作成者:
Satoshi Okita satoshiokita@gmail.com

フィールドの概要
protected  Node parent
           
 
コンストラクタの概要
Node(Node parent)
           
 
メソッドの概要
 int getReturnType()
          ツリー構造の構文解析木の葉から根に向かって、メソッドの戻り値を取得する.
 int localVariableCount()
          ツリー構造の構文解析木の葉から根に向かってローカル変数の数を取得する.
protected  Expression parseExpression(boolean requireArguments, SourceReader sReader)
          returnキーワード後の式を解析.引数の解析.
protected  Expression parseFactor(boolean requireArguments, SourceReader sReader)
          Factor(要素)の解析.
protected  Expression parseRefferenceOrCall(Node node, java.lang.String curentIdentifer, SourceReader sReader)
          関数呼び出しまたは、変数の参照の構文解析.
 Statement parseStatement(int token, SourceReader sReader)
          どの文の解析かをトークンから割り出して、実際の構文解析処理は各クラスに委譲する.
protected  Expression parseTerm(boolean requireArguments, SourceReader sReader)
          Term(用語)の解析. 1 + hogeValueの1やhogeValueにあたるオペランドを解析する.オペランドが関数呼び出しや さらに括弧でくくられている場合はさらに内部を解析していく.
 void setParent(Node parent)
           
 
クラス java.lang.Object から継承されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

フィールドの詳細

parent

protected Node parent
コンストラクタの詳細

Node

public Node(Node parent)
メソッドの詳細

setParent

public void setParent(Node parent)

localVariableCount

public int localVariableCount()
ツリー構造の構文解析木の葉から根に向かってローカル変数の数を取得する. サブクラスで数が取れない場合、親クラスに数の取得を依頼する. これもgetReturnTypeメソッドと同じでNodeクラスに汎用的なメソッド定義をしている.


getReturnType

public int getReturnType()
ツリー構造の構文解析木の葉から根に向かって、メソッドの戻り値を取得する. 例えばreturn文の場合は、構文木の親はブロックになり、ブロックの親はメソッド情報 になる.このような場合、ブロックからは戻り値の型を取ることはできないので、 メソッド情報まで順々に依頼していく形になる.順々に取れるようにするためには、 すべての構文木で親をたどれるようにメソッドを作らなければいけないため、このクラスで 汎用的なgetReturnTypeメソッドを定義している.

関連項目:
Method.getReturnType()

parseStatement

public Statement parseStatement(int token,
                                SourceReader sReader)
                         throws CompileError
どの文の解析かをトークンから割り出して、実際の構文解析処理は各クラスに委譲する.

例外:
CompileError

parseExpression

protected Expression parseExpression(boolean requireArguments,
                                     SourceReader sReader)
                              throws CompileError
returnキーワード後の式を解析.引数の解析.

パラメータ:
requireArguments - 例えば式がhoge();でもよい場合はtrueにする.もし falseにすると式hoge(10);のように式に引数が必要となる.
リターン式の例
 return hoge_func();
 return hoge_func(1);
 return intValue;
 return 10;
 return (10 * 10) / 2;
 
例外:
CompileError

parseTerm

protected Expression parseTerm(boolean requireArguments,
                               SourceReader sReader)
                        throws CompileError
Term(用語)の解析. 1 + hogeValueの1やhogeValueにあたるオペランドを解析する.オペランドが関数呼び出しや さらに括弧でくくられている場合はさらに内部を解析していく.

例外:
CompileError

parseFactor

protected Expression parseFactor(boolean requireArguments,
                                 SourceReader sReader)
                          throws CompileError
Factor(要素)の解析. オペランドがどの状態であるか確認して、それ専用の解析を行う.

パラメータ:
requireArguments - nullを容認するかしないか.
sReader - ソースコードリーダ.
例外:
CompileError

parseRefferenceOrCall

protected Expression parseRefferenceOrCall(Node node,
                                           java.lang.String curentIdentifer,
                                           SourceReader sReader)
                                    throws CompileError
関数呼び出しまたは、変数の参照の構文解析. 構文木に入るものは、必ずこのNodeクラスを継承している.そのためこのメソッドが 呼ばれたら、このNodeクラスに定義されているものが呼ばれる.このメソッドは 単純に親ノードへ変数の参照か関数呼び出しであるかの確認を委譲する.Blockクラスと Methodクラスのみ"変数の参照か関数呼び出しであるかの確認"を出来るようにしている. なぜなら、ブロック文内とメソッド内のみ、変数や関数の記述が出来、呼べるからである. もし、この抽象的なメソッドがないと、親ノードへの確認委譲を実装するのが面倒になる.

例外:
CompileError
関連項目:
Block.parseRefferenceOrCall(Node, String, SourceReader), Method.parseRefferenceOrCall(Node, String, SourceReader)