SCPP
A simple scripting language in C++
scpp_ast.hpp File Reference

Abstract Syntax Tree for SCPP. More...

#include <string>
#include <list>
#include <map>
Include dependency graph for scpp_ast.hpp:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  SCPP::Expr
 式を表す構造体 More...
 
struct  SCPP::SInt
 
struct  SCPP::SNot
 
struct  SCPP::SBin
 
struct  SCPP::SSeq
 
struct  SCPP::SAssign
 
struct  SCPP::SIdent
 
struct  SCPP::SIf
 
struct  SCPP::SWhile
 
struct  SCPP::SFor
 
struct  SCPP::SProgram
 プログラムを表す構造体 More...
 
struct  SCPP::SFunction
 関数を表す構造体 More...
 
struct  SCPP::SCall
 

Enumerations

enum  SCPP::ExprType {
  Int, SCPP::ExprType::Not, SCPP::ExprType::Bin, SCPP::ExprType::Seq,
  SCPP::ExprType::Assign, SCPP::ExprType::Ident, SCPP::ExprType::If, SCPP::ExprType::While,
  SCPP::ExprType::For, SCPP::ExprType::Call
}
 式の種別を表す列挙体 More...
 
enum  SCPP::Op {
  Add, Sub, Mul, Div,
  Mod, And, Or, Nor,
  Nand, Xor, Lt, Leq,
  Gt, Geq, Eq, Neq
}
 二項演算の演算子を表す列挙体 More...
 

Functions

struct Expr SCPP::tInt (int value)
 整数型の式を作成する More...
 
struct Expr SCPP::tNot (struct Expr expr)
 論理否定の式を作成する More...
 
struct Expr SCPP::tAdd (struct Expr left, struct Expr right)
 加算の式を作成する More...
 
struct Expr SCPP::tSub (struct Expr left, struct Expr right)
 減算の式を作成する More...
 
struct Expr SCPP::tMul (struct Expr left, struct Expr right)
 乗算の式を作成する More...
 
struct Expr SCPP::tDiv (struct Expr left, struct Expr right)
 除算の式を作成する More...
 
struct Expr SCPP::tMod (struct Expr left, struct Expr right)
 剰余の式を作成する More...
 
struct Expr SCPP::tAnd (struct Expr left, struct Expr right)
 論理ANDの式を作成する More...
 
struct Expr SCPP::tOr (struct Expr left, struct Expr right)
 論理ORの式を作成する More...
 
struct Expr SCPP::tNor (struct Expr left, struct Expr right)
 論理NORの式を作成する More...
 
struct Expr SCPP::tNand (struct Expr left, struct Expr right)
 論理NANDの式を作成する More...
 
struct Expr SCPP::tXor (struct Expr left, struct Expr right)
 論理XORの式を作成する More...
 
struct Expr SCPP::tLt (struct Expr left, struct Expr right)
 比較演算(未満)の式を作成する More...
 
struct Expr SCPP::tLeq (struct Expr left, struct Expr right)
 比較演算(以下)の式を作成する More...
 
struct Expr SCPP::tGt (struct Expr left, struct Expr right)
 比較演算(より大きい)の式を作成する More...
 
struct Expr SCPP::tGeq (struct Expr left, struct Expr right)
 比較演算(以上)の式を作成する More...
 
struct Expr SCPP::tEq (struct Expr left, struct Expr right)
 比較演算(等しい)の式を作成する More...
 
struct Expr SCPP::tNeq (struct Expr left, struct Expr right)
 比較演算(等しくない)の式を作成する More...
 
template<class... Args>
struct Expr SCPP::tSeq (Args... args)
 連接式を作成する More...
 
struct Expr SCPP::tAssign (string name, struct Expr value)
 変数代入式を作成する More...
 
struct Expr SCPP::tIdent (string name)
 変数参照式を作成する More...
 
struct Expr SCPP::tIf (struct Expr condition, struct Expr thenClause, struct Expr elseClause=tInt(0))
 if式を作成する More...
 
struct Expr SCPP::tWhile (struct Expr condition, struct Expr body)
 while式を作成する More...
 
struct Expr SCPP::tFor (struct Expr init, struct Expr condition, struct Expr update, struct Expr body)
 for式を作成する More...
 
template<class... Args>
struct SProgram SCPP::tProgram (list< struct SFunction > functions, Args... bodies)
 一つのプログラムを表す構造体を作成する More...
 
template<class... Args>
list< struct SFunction > SCPP::FunctionList (Args... functions)
 関数リストを作成する More...
 
template<class... Args>
struct SFunction SCPP::tFunction (string name, list< string > args, Args... bodies)
 関数定義を作成する More...
 
template<class... Args>
list< string > SCPP::ParamList (Args... args)
 引数のリストを作成する More...
 
template<class... Args>
struct Expr SCPP::tCall (string name, Args... args)
 関数呼び出し式を作成する More...
 

Detailed Description

Abstract Syntax Tree for SCPP.

Author
Konishi, Hiroto

Enumeration Type Documentation

◆ ExprType

enum SCPP::ExprType
strong

式の種別を表す列挙体

◆ Op

enum SCPP::Op
strong

二項演算の演算子を表す列挙体

Function Documentation

◆ FunctionList()

template<class... Args>
list<struct SFunction> SCPP::FunctionList ( Args...  functions)

関数リストを作成する

Template Parameters
Argsstruct SFunctionの可変長引数
Parameters
functions関数構造体を並べる。個々の関数構造体は、 tFunction() を用いて作成できる。
Returns
list<struct SFunction> 関数構造体のリスト
Note
引数が与えられない場合、空のリストを返す。

◆ ParamList()

template<class... Args>
list<string> SCPP::ParamList ( Args...  args)

引数のリストを作成する

Template Parameters
Argsstringの可変長引数
Parameters
args引数の変数名を並べる
Returns
list<string> 引数のリスト
Note
引数が与えられなかった場合、空のリストが返される。

◆ tAdd()

struct Expr SCPP::tAdd ( struct Expr  left,
struct Expr  right 
)

加算の式を作成する

Parameters
left第1項の式
right第2項の式
Returns
struct Expr 2項の加算を表す式

◆ tAnd()

struct Expr SCPP::tAnd ( struct Expr  left,
struct Expr  right 
)

論理ANDの式を作成する

Parameters
left第1項の式
right第2項の式
Returns
struct Expr 2項の論理ANDを表す式
Note
各項について、非ゼロを真、ゼロを偽と評価する。
真の場合1、偽の場合0と評価される。

◆ tAssign()

struct Expr SCPP::tAssign ( string  name,
struct Expr  value 
)

変数代入式を作成する

Parameters
name変数名
value代入する値を表す式
Returns
struct Expr 変数代入式
Note
変数が存在しない場合、新たに変数を作成し、valueで初期化することを意味する。
既に存在する変数の場合は、valueで上書きすることを意味する。

◆ tCall()

template<class... Args>
struct Expr SCPP::tCall ( string  name,
Args...  args 
)

関数呼び出し式を作成する

Template Parameters
Argsstruct Exprの可変長引数
Parameters
name呼び出す関数の名前
args実引数として関数に与える式(仮引数の宣言順に並べる)
Returns
struct Expr 関数呼び出し式

◆ tDiv()

struct Expr SCPP::tDiv ( struct Expr  left,
struct Expr  right 
)

除算の式を作成する

Parameters
left第1項の式
right第2項の式
Returns
struct Expr 2項の除算(第1項/第2項)を表す式
Note
SCPPの除算において、小数点以下は0に近くなるように切り捨てられる。
SCPPにおいて、0除算は未定義動作である。

◆ tEq()

struct Expr SCPP::tEq ( struct Expr  left,
struct Expr  right 
)

比較演算(等しい)の式を作成する

Parameters
left第1項の式
right第2項の式
Returns
struct Expr 2項の比較演算(等しい; 第1項==第2項)を表す式
Note
真の場合1、偽の場合0と評価される。

◆ tFor()

struct Expr SCPP::tFor ( struct Expr  init,
struct Expr  condition,
struct Expr  update,
struct Expr  body 
)

for式を作成する

Parameters
init初期化式
condition評価するべき条件式
update更新式
body条件式が真の間に実行するべき式
Returns
struct Expr for式
Note
条件式が真にならない場合、0と評価される。

◆ tFunction()

template<class... Args>
struct SFunction SCPP::tFunction ( string  name,
list< string >  args,
Args...  bodies 
)

関数定義を作成する

Parameters
name関数名
args引数の変数名のリスト
body関数本体が含む式を実行順に並べる
Returns
struct SFunction 関数定義の構造体
Note
関数定義は式ではないことに注意せよ。

◆ tGeq()

struct Expr SCPP::tGeq ( struct Expr  left,
struct Expr  right 
)

比較演算(以上)の式を作成する

Parameters
left第1項の式
right第2項の式
Returns
struct Expr 2項の比較演算(以上; 第1項>=第2項)を表す式
Note
真の場合1、偽の場合0と評価される。

◆ tGt()

struct Expr SCPP::tGt ( struct Expr  left,
struct Expr  right 
)

比較演算(より大きい)の式を作成する

Parameters
left第1項の式
right第2項の式
Returns
struct Expr 2項の比較演算(より大きい; 第1項>第2項)を表す式
Note
真の場合1、偽の場合0と評価される。

◆ tIdent()

struct Expr SCPP::tIdent ( string  name)

変数参照式を作成する

Parameters
name変数名
Returns
struct Expr 変数参照式
Note
変数が存在しない場合、新たに変数を作成し、0で初期化する。

◆ tIf()

struct Expr SCPP::tIf ( struct Expr  condition,
struct Expr  thenClause,
struct Expr  elseClause = tInt(0) 
)

if式を作成する

Parameters
condition評価するべき条件式
thenClause条件式が真の場合に実行するべき式
elseClause条件式が偽の場合に実行するべき式
Returns
struct Expr if式
Note
elseClauseは省略可能であり、省略された場合は整数型式Int(0)として扱われる。

◆ tInt()

struct Expr SCPP::tInt ( int  value)

整数型の式を作成する

Parameters
value整数値
Returns
struct Expr valueを値としてもつ整数型の式

◆ tLeq()

struct Expr SCPP::tLeq ( struct Expr  left,
struct Expr  right 
)

比較演算(以下)の式を作成する

Parameters
left第1項の式
right第2項の式
Returns
struct Expr 2項の比較演算(以下; 第1項<=第2項)を表す式
Note
真の場合1、偽の場合0と評価される。

◆ tLt()

struct Expr SCPP::tLt ( struct Expr  left,
struct Expr  right 
)

比較演算(未満)の式を作成する

Parameters
left第1項の式
right第2項の式
Returns
struct Expr 2項の比較演算(未満; 第1項<第2項)を表す式
Note
真の場合1、偽の場合0と評価される。

◆ tMod()

struct Expr SCPP::tMod ( struct Expr  left,
struct Expr  right 
)

剰余の式を作成する

Parameters
left第1項の式
right第2項の式
Returns
struct Expr 2項の剰余(第1項第2項)を表す式

◆ tMul()

struct Expr SCPP::tMul ( struct Expr  left,
struct Expr  right 
)

乗算の式を作成する

Parameters
left第1項の式
right第2項の式
Returns
struct Expr 2項の乗算を表す式

◆ tNand()

struct Expr SCPP::tNand ( struct Expr  left,
struct Expr  right 
)

論理NANDの式を作成する

Parameters
left第1項の式
right第2項の式
Returns
struct Expr 2項の論理NANDを表す式
Note
各項について、非ゼロを真、ゼロを偽と評価する。
真の場合1、偽の場合0と評価される。

◆ tNeq()

struct Expr SCPP::tNeq ( struct Expr  left,
struct Expr  right 
)

比較演算(等しくない)の式を作成する

Parameters
left第1項の式
right第2項の式
Returns
struct Expr 2項の比較演算(等しくない; 第1項!=第2項)を表す式
Note
真の場合1、偽の場合0と評価される。

◆ tNor()

struct Expr SCPP::tNor ( struct Expr  left,
struct Expr  right 
)

論理NORの式を作成する

Parameters
left第1項の式
right第2項の式
Returns
struct Expr 2項の論理NORを表す式
Note
各項について、非ゼロを真、ゼロを偽と評価する。
真の場合1、偽の場合0と評価される。

◆ tNot()

struct Expr SCPP::tNot ( struct Expr  expr)

論理否定の式を作成する

Parameters
expr論理否定を行う式
Returns
struct Expr exprの論理否定を表す式

◆ tOr()

struct Expr SCPP::tOr ( struct Expr  left,
struct Expr  right 
)

論理ORの式を作成する

Parameters
left第1項の式
right第2項の式
Returns
struct Expr 2項の論理ORを表す式
Note
各項について、非ゼロを真、ゼロを偽と評価する。
真の場合1、偽の場合0と評価される。

◆ tProgram()

template<class... Args>
struct SProgram SCPP::tProgram ( list< struct SFunction functions,
Args...  bodies 
)

一つのプログラムを表す構造体を作成する

Template Parameters
Argsstruct Exprの可変長引数
Parameters
functions関数定義式のリスト。 FunctoinList() を用いて作成することを推奨する。
bodies式を実行したい順に並べる
Returns
struct SProgram 一つのプログラムを表す構造体
Note
同名の関数を定義した場合、後に定義された関数が優先される。
関数の評価は前から順に行われる。
プログラムは式ではないことに注意せよ。

◆ tSeq()

template<class... Args>
struct Expr SCPP::tSeq ( Args...  args)

連接式を作成する

Template Parameters
Argsstruct Exprの可変長引数
Parameters
args式を実行したい順に並べる
Returns
struct Expr 連接式

◆ tSub()

struct Expr SCPP::tSub ( struct Expr  left,
struct Expr  right 
)

減算の式を作成する

Parameters
left第1項の式
right第2項の式
Returns
struct Expr 2項の減算(第1項-第2項)を表す式

◆ tWhile()

struct Expr SCPP::tWhile ( struct Expr  condition,
struct Expr  body 
)

while式を作成する

Parameters
condition評価するべき条件式
body条件式が真の間に実行するべき式
Returns
struct Expr while式
Note
条件式が真にならない場合、0と評価される。

◆ tXor()

struct Expr SCPP::tXor ( struct Expr  left,
struct Expr  right 
)

論理XORの式を作成する

Parameters
left第1項の式
right第2項の式
Returns
struct Expr 2項の論理XORを表す式
Note
各項について、非ゼロを真、ゼロを偽と評価する。
真の場合1、偽の場合0と評価される。