Skip to content

Release 0.2.0

らいパン粉 edited this page Aug 27, 2018 · 24 revisions

Release 0.2.0

int32型に限定した、関数定義をできるように。

組み込みのprint関数

print 5

5が出力される

複数の文の記述に対応

;を使って分を区切れる。

print 4;

4+5+1+1; print 888

()で優先順位の調整ができるように

(4+5)*2

関数定義の例

add x y = x + y

使用例

print (add 4 5)

BNF

+は1回以上

{}は0回以上を表す

?は0 or 1回を表す

<program>  := {<stmt>}
<stmt>     := <skip_many> ( <infix> | <expr_app> | <def_func>) <skip_many> ';'
<def_func> := <id> {<skip_many> <id>} <skip_many> '=' <skip_many> <expr_app>
<id>       := [a-z]{ [a-z] | [0-9] | '_' }
<expr_app> := <expr> { <expr> }
<expr>     := <term> <skip_many> { <op> <skip_many> <term> <skip_many> } 
<infix>    := ('infixr' | 'infixl') <space>+ <num> <space>+ <op>
<op>       := '+' | '-' | '/' | '*'
<term>     := <num> | <id> | <paren>
<paren>    := '(' <expr_app> ')'
<num>      := [0-9]+
<skip>     := '\n' | <space>
<skip_many>:= {<skip>}
<space>    := ' ' | '\t'

操作的意味論

V=i32

Clone this wiki locally