━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 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/