関数型のコンパイラ言語Yet

© CC BY 4+ visibility1238
© CC BY 4+
visibility1238

シンプルでわかりやすい関数型のコンパイラ言語Yetと仮想環境。

link https://github.com/natsuakane/Yet.git
動画
システム構成
system image

Yetコンパイラ

入力ファイルからYet言語のコードを読み込み、字句解析、構文解析を行ってYet機械語を生成し、実行ファイルに出力する。

Yet仮想環境

実行ファイルをプログラム領域に読み込み、64個の64ビットのレジスタ、スタック領域、グローバル領域とヒープ領域を持つYet仮想環境によってYet機械語を実行する。

Yet言語仕様

digit ::="0" | "1" | "2" | "3" | ... | "8" | "9"
number ::=digit | number digit
letter ::="a" | "b" | ... | "z" | "A" | "B" | ... | "Z"
identifier ::=letter | identifier leter | identifier digit | identifier "_"
factor ::=number | identifier {"(" parameter ")"} | "(" expression ")" | block | array
array_expr ::=factor {("@" | "$") factor}
power ::={array_expr "^"} array_expr
term ::=power {("*" | "/" | "%") power}
add_expr ::=term {("+" | "-") term}
eq_expr ::=add_expr {("==" | "!=" | "<" | ">" | "<=" | ">=") add_expr}
expression ::=eq_expr {"=" eq_expr}
suite ::={expression ";" {suite}}
parameter ::={expression {"," parameter}}
block ::="{" suite "}"
array ::="[" parameter "]"

ストーリー

動機

学校でScratchによるプログラミング教育が始まり、コンピューターの内部のしくみを本で読み自分で作りたくなった。そんな時に図書館で「スクリプト言語の作り方」という本を見つけ、スクリプト言語を改造してコンパイル言語を作って見ようと思った。本を読んで式だけでプログラムをかける関数型言語というものを知り、関数型言語を作ろうと思った。


特徴

小中学生でも分かりやすい数学に近い記法を用いる簡単な関数型言語として設計した。 複雑な実在するCPUで使用される機械語は使わず、機械語とその実行環境まで自分で作った。


工夫

字句解析器、構文解析器は既存のライブラリ等を使わずに、いちから自作した。 C++のクラスを使用して分かりやすく記述した。
Yet言語の関数の呼び出しをコンパイルする時に、必要なレジスタが破壊されないようにPUSH,POPをするアルゴリズムを工夫した。
javascriptのヴィジュアル環境で浮動小数点数と整数の変換時に発生する誤差による誤動作をどう解決するか工夫した。

メンバー
  • user
    YK @ykk001

同じニオイがする作品
  • event causal SW:電子工作応用教具作成用素材の情報共有コミュニティー
  • event LEDマトリクスボードを自作してM5Stackで制御してみた
  • event School Tech(問題作成と採点をより簡単に、高速に)
  • event 植物と話せるようになる植木鉢

Proto lovers ♥
user
user
user
user

イベントまとめ

コンテストまとめ

作品を登録しよう

モノづくりしている人に、つくった作品を見てもらえ、リアクションがもらえるかも?

close

目次


Proto lovers ♥
user
user
user
user