mc-lang 1 20190908
 - mc-lang全般に含まれているリソースまとめです。
  - https://github.com/task4233/mc-lang-1
 
  追加した仕様
 #でコメントアウト  - カッコの実装
  - 二項演算(+,-,*,/)の実yo
 
  lexer.h
 - 字句解析用ヘッダ
  - このセクションでは、Lexerというテキストから「数字」や「演算子」をまとまり毎に分割するクラスを実装している。
  - 全体的な流れとしては、gettokをParserから呼ぶことにより「次のトークン」を読み、それが数値リテラルだった場合はnumValという変数にセットする。
 
  variables
  | 名称 |  詳細 | 
 | tok_eof |  EOFトークン(-1) | 
 | tok_number |  値を格納 | 
  functions
   class
  Lexer
  Public
 - gettok()メソッド
  - getNumVal
  - setNumVal
  - initStream
 
  Private
   parser.h
 - 構文解析用ヘッダ
  - ここのセクションでは、AST(構文解析木)の葉を定義している。
  - MCコンパイラの根幹であるクラスでLexerとCodeGenで使われている。
  - Lexerが次のトークンを取ってきて、それが数値リテラルであったらNumberASTに値を格納し、そのポインタを親ノードが保持する。
  - 全てのコードを無事にASTとして表現できたら、後述するcodegenを再帰的に呼び出す事によりオブジェクトファイルを生成する。
 
  variables
 - curTok
  - getNextToken
  - BinopPrecedence
 
  functions
 - GetTokPrecedence()
- 二項演算子の結合度を取得
  - もし現在のトークンが二項演算子ならその結合度を返し、そうでないなら-1を返す。
 
  - LogError(const char *str)
- エラーを表示しnullptrを返してくれるエラーハンドリング関数
 
  - ParseExpressions()
- 数値リテラル/カッコ->二項演算子の順にパースできるかを確認してパースする
 
  - ParseNumberExpr()
- 数値リテラルをパースして内部のexpressionのゆにぽを返す関数
 
  - ParseParenExpr
- カッコ内部のexpressionをパースして内部のexpressionのゆにぽを返す関数
 
  - ParsePrimary()
- NumberASTかカッコをパースするための関数を呼び出す関数
 
  - ParseBinOpRHS(int CallerPrec, std::unique_ptr<ExprAST> LHS)
- 二項演算子をパースする関数
  - LHSが入った状態でよびだされ, LHSとRHSと二項演算子がペアになった状態で返す
 
  - ParseTopLevelExpr()
- パーサーのトップレベル関数
  - まだ関数定義は実装しないので、今のmc言語では__anon_exprという関数がトップレベルに作られ、その中に全てのASTが入る
 
 
  class
  ExprAST
 5+2や2*10-2等のexpressionを表すクラス
  NumberAST
   public
   private
   BinaryAST
   public
   private
 - Op
  - LHS(Left-hand side)/RHS(Right-hand side)
 
  PrototypeAST
 - 関数シグネチャーで、関数の名前と引数の名前を表すクラス
 
  public
   private
 - Name
  - Args
- 引数
  - std::vector<std::string>
 
 
  FunctionAST
 - 関数のbody(C++で言うint foo) {...}の中身)を表すクラス
 
  public
   private
 - Proto
- 関数の名前と引数を保持するオブジェクトのゆにぽ
  - std::unique_ptr<PrototypeAST>
 
  - Body
- 関数の中身のexpressionを保持するオブジェクトのゆにぽ
  - std::unique_ptr<ExprAST>