プログラミング言語SML#解説 3.7.1版
Chapter 19 式
式expの構文の定義は, 演算子式infix, 関数適用式appexp, 原子式atexp を用いて階層的に定義される.
-
•
式(トップレベル)
exp ::= infix exp : ty exp andalso exp exp orelse exp exp handle match raise exp if exp then exp else exp while exp do exp case exp of match fn match _import string : cfunty C関数のインポート exp : _import cfunty C関数のインポート _sizeof( ty ) 型のサイズ _dynamic exp as ty 動的型キャスト _dynamiccase exp of match 動的型キャスト付き場合分け _sqlserver appexp : ty SQLサーバ _sql pat => sqlfn SQL実行関数 _sql sql SQLクエリ断片 match ::= pat => exp | match パターンマッチング -
•
演算子式
infix ::= appexp infix vid infix -
•
関数適用式
appexp ::= atexp appexp atexp 関数適用(左結 合) appexp # { exprow } レコードフィールドアップデート -
•
原子式
atexp ::= scon 定数 op longVid 識別子 {exprow } レコード (exp,,exp) 組() () unit型定数 #lab レコードフィールドセレクト [exp,,exp] リスト() (exp;;exp) 逐次実行式() let declList in exp;;exp end 局所宣言() _sql (sql) SQLクエリ断片 (exp) exprow ::= lab = exp , exprow レコードフィールド
この階層によって,構文の結合力(まとまりの強さ)が表現される. 原子式が結合の最小単位であり,関数適用式appexp, 演算子式infix,式expの各定義は,この順の結合力が強い. ただし,演算子式infixを構成する各要素間の結合力は, 文法ではなく,演算子宣言によって決定される. さらに演算子式は,演算子宣言の結合の強さに従って,組への関数適用 に展開される糖衣構文である. そこでまず,次節(19.1)において演算子式の 展開を定義したのち,式の文法で表現される結合力の強順に,各構造とその式が もつ型と値を説明する.