━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
SS言語の構文
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
本資料では,実験で作成するインタプリタの処理対象であるSS言語の構文をまとめる.

●字句構文

字句     -> ( | ) | 数 | 名前

数       -> 符号? 数字 数字*
名前     -> 符号 | 開始文字 後続文字*
開始文字 -> 英字 | 記号
後続文字 -> 英字 | 記号 | 数字 | 符号

符号     -> + | -
数字     -> 0 | 1 | … | 9
英字     -> a | b | … | z | A | B | … | Z
記号     -> * | / | % | ^ | = | < | > | ! | ? | $ | & | : | _ | ~ | .

●基本課題の構文解析向けの文法

式 -> 数 | 名前 | ( 式* )

●基本課題の処理系向けの文法

プログラム -> 文*                       文を順に実行して式の値を表示

文 -> ( def 名前 式 )                   変数定義
    | 式                                式の評価

式 -> 数                                定数
    | 名前                              変数
    | ( if 式 式 式 )                   条件式
    | ( 名前 式* )                      呼び出し式

組み込み関数: + - * / % = < not and or

●発展課題の処理系向け文法

プログラム -> 文*

文 -> ( def 名前 式 )
    | ( fun ( 名前 名前* ) 式 )         関数定義
    | 式

データ -> 数 | 名前 | ( データ* )

式 -> 数
    | 名前
    | ( if 式 式 式 )
    | ( 名前 式* )
    | ( data データ )                   データ式
    | ( do 文* 式 )                     局所式

追加の組み込み関数: head rest cons null? number? name? list?

●記法

X*     Xの0個以上の並び (Xの列)
X?     0個か1個のX (省略可能なX)

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
実験のホームページ

山田 俊行
https://www.cs.info.mie-u.ac.jp/~toshi/