Часть II. Формальное описание языков программирования ( Формальная спецификация формальных языков ) Приложение. Дерево абстрактного синтаксиса языка IMP
«Расширение» RSL(1) type T1 = T2 T3 это сокращение, означающее, что описаны типы T2 и Т3 -T2 :: T2 1 T2 2 … (short record definition) или T2 = T4 … -T3 :: T3 1 T3 2 … или T3 = T5 …
«Расширение» RSL(2) Напоминаем, что type T :: T 1 T 2 … это сокращение, означающее, что T == mk_C(p 1, p 1, …) Кроме того, допускаем, что возможно со-сущестование типов T1 и T2 с одноименными конструкторами: T1 == mk_C(p 1, p 2, …) и T2 == mk_C(p 1, p 2, …)
«Расширение» RSL(3) T1 T2 == mk_C1(p1 1, p1 2, …) T3 T4 == mk_C4(p4 1, p4 2, …) T5 == mk_C5(p5 1, p5 2, …) T1 = T2 T3 T3 = T4 T5
Программа и блок Prog :: Block Block :: Decl-list Stmt-list
Декларации Decl = Var_Def Func_Def Var_Def :: Id_Decl Type_Desc Fun_Def :: Id_Decl Param-list Type_Desc Block Type_Desc = int bool Param :: Id_Decl Type_Desc Id_Decl :: Text int :: Int bool :: Bool
Операторы Stmt = Assign Block If While Assign :: Id Expr If = If_pair-list If_pair :: Boolexp Stmt-list While :: Boolexp Stmt-list
Выражения Expr = Intexp Boolexp Intexp = Integer Id_Use Bi_Int_Exp Funcall Boolexp :: False | True | Id_Use | Equal | Comp Bi_Int_Exp :: Int_Exp Ar_Operation Int_Expr Ar_Operation = Sum Sub Mult … Equal :: Expr Expr Comp :: Intexp Op Intexp Id_Use :: Text
Вызов функции (Function Call) Funcall ::= Id_Use Arg-list Arg :: Expr