読者です 読者をやめる 読者になる 読者になる

自作言語GELを作る日記

C++で自作言語を作るブログ

自作言語を作る その2 ~文法定義~

                _____ _____ __  
      / ̄ ̄\  |   __|   __|  |  
     | o  o |  |  |  |   __|  |__ 
    ∠――――┐ノ  |_____|_____|_____|

まずは GEL version 0.0.1 として、1+1コンパイルできるコンパイラを作ります。

正確には以下のソースをコンパイルできるコンパイラを作成します。

p 1+1;

コンパイラ作成の進め方

コンパイラ作成は以下の様なステップで進めます。

  1. 文法定義
  2. 字句解析器 実装
  3. 構文解析 実装
  4. 中間言語生成器 実装
  5. 仮想マシン 実装

この記事では 1の文法定義を行います。

GEL version 0.0.1 文法

GML(GEL Modeling Language)

GELの文法の表記のための独自のメタ言語を定義します。

プログラミング言語の文法を表記するとき一般的にはBNF記法が使われるんですが、
BNFは視認性が悪い気がするので、似非BNFを用意する運びとなりました。

GML定義

# ルール定義
<ルール名> := <式>

# 繰り返し
<式>?    # オプショナル
<式>*    # 0回以上
<式>+    # 1回以上

# 式
"abc"    # 文字列
/[a-z]+/ # 正規表現

# その他
<ルール名>      # 式にルールを用いることも可能
<式> | <式>     # or
(<式> <式> ...) # グルーピング

文法

GMLで表記したGELの文法を以下に示します。

GEL version 0.0.1 文法

program      := statements*
statements   := ";" | p_statements
p_statements := "p" expr ";"
expr         := int "+" int
int          := /[0-9]+/

これで文法定義は終わりです。
次回は開発環境の構築を行おうと思います。