# Logi Code - Overview
Logi Codeは、組み合わせ回路を定義、実行できるスクリプト言語。
シンプルでわかりやすいシンタックスと最低限の演算子を提供して、組み合わせ回路の学習ツールとして利用できる。
## Purpose
- 組み合わせ回路の学習ツールとして使用できる。
- わかりやすくシンプルなシンタックスを提供する。
- シンプルな処理系を実現する。
## Features
### Summary
- 1bitの真偽値のみをサポートする。
- 式の定義においてポーランド記法を採用している。
- 必要最低限の演算子を提供する。
- 式指向のシンタックスを提供する。
### Syntax
- 全ての式は一行で書かれる。
#### Bind
**Variable**
`A : B`
- `A`に`B`をバインドする。ここで`B`は式や値を表す。
- 入力を伴わない式や値をバインドする際は、バインド名は最初の文字だけ大文字で他は小文字にします。
**Function**
`and A B : not or not A not B`
- `and`に入力`A`, `B`を伴う式をバインドする。
- ここでの`A`や`B`は定義時に値が代入されず、コール時にinputとしておいたバインドの値が代入される。
- 入力を伴うバインド名は全て小文字にする。
#### Operator
- `not A` : Aの否定を返す。
- `or A B` : AとBの論理和を返す。
#### IO
`input A B ..` : 標準入力の値をA, B, ..にバインドする。
`out A B` : A, B ..の値を標準出力に表示する。
- `input`も`out`もバインド名にしか作用しない。(演算子を含んだ式を置いてはいけない。)
- inputのときの表示は、`A: □ B: ■`のように表示され、タブとシフトで移動、スペースで選択、エンターで決定する。
- outの時は、`A: ■ B: □`のように表示される。
- 一行に複数の値の表示が可能で、段階的な処理を視覚化できる。
#### Comment
`//`ではじまる行はコメントとして扱う。
### Usage
`logi` : 対話型インタプリタが起動
`logi [file_name.lc]` : インタプリタによってファイルに書かれたコードが実行される。
`logi build [file_name]` :ASTが`file_name.lca`として出力される。
`logi run [file_name.lca]` : `file_name.lca`が実行される。
### Examples
`
// Andの計算
and A B : not or not A not B
A : input
B : input
C : and A B
out C
`
## Think
- バージョンの考え方が間違っていたらしい。(0.x.yはプレリリース、ベータだが、0.0.xは基本的な機能の実装が進んでいる状態。)