Опубликован: 19.09.2008 | Доступ: свободный | Студентов: 658 / 70 | Оценка: 4.50 / 5.00 | Длительность: 21:25:00
Лекция 10:

Синтаксический справочник

< Лекция 9 || Лекция 10: 123456 || Лекция 11 >
simpletype \to tycon tyvar1 ... tyvark (k>=0)
constrs \to constr1 | ... | constrn (n>=1)
constr \to con [!] atype1 ... [!] atypek (число аргументов конструктора con = k, k>=0 )
| (btype | ! atype) conop (btype | ! atype) (инфиксный оператор conop)
| con { fielddecl1 , ... , fielddecln } (n>=0)
newconstr \to con atype
| con { var :: type }
fielddecl \to vars :: (type | ! atype)
deriving \to deriving (dclass | (dclass1, ... , dclassn)) (n>=0)
dclass \to qtycls

Перевод:

простой-тип \to конструктор-типа переменная-типа1 ... переменная-типаk (k>=0)
список-конструкций \to конструкция1 | ... | конструкцияn (n>=1)
конструкция \to конструктор [!] a-тип1 ... [!] a-типk (число аргументов конструктора con = k, k>=0 )
| (b-тип | ! a -тип) оператор-конструктора ( b -тип | ! a -тип) (инфиксный оператор conop )
| конструктор { объявление-поля1 , ... , объявление-поляn } (n>=0)
новая-конструкция \to конструктор a -тип
| конструктор { переменная :: тип }
объявление-поля \to список-переменных :: (тип | ! a -тип)
deriving -инструкция \to deriving (производный-класс | (производный-класс1, ... , производный-классn)) (n>=0)
производный-класс \to квалифицированный-класс-типа
inst \to gtycon
| ( gtycon tyvar1 ... tyvark ) ( k>=0, все tyvar различны)
| ( tyvar1 , ... , tyvark ) ( k>=2, все tyvar различны)
| [ tyvar ]
| ( tyvar1 -> tyvar2 ) ( tyvar1 и tyvar2 различны)

Перевод:

экземпляр \to общий-конструктор-типа
| ( общий-конструктор-типа переменная-типа1 ... переменная-типаk ) ( k>=0, все переменные-типа различны)
| ( переменная-типа1 , ... , переменная-типаk ) ( k>=2, все переменные-типа различны)
| [ переменная-типа ]
| ( переменная-типа1 \to переменная-типа2 ) (переменная-типа1 и переменная-типа2 различны)
funlhs \to var apat {apat }
| pati+1 varop(a,i) pati+1
| lpati varop(l,i) pati+1
| pati+1 varop(r,i) rpati
| ( funlhs ) apat {apat }
rhs \to = exp [where decls]
| gdrhs [where decls]
gdrhs \to gd = exp [gdrhs]
gd \to | exp0

Перевод:

левая-часть-функции \to переменная такой-как-образец {такой-как-образец }
| образецi+1 оператор-переменной(a,i) образецi+1
| левый-образецi оператор-переменной(l,i) образецi+1
| образецi+1 оператор-переменной(r,i) правый-образецi
| ( левая-часть-функции ) такой-как-образец {такой-как-образец }
правая-часть \to = выражение [where список-объявлений]
| правая-часть-со-стражами [where список-объявлений]
правая-часть-со-стражами \to страж = выражение [правая-часть-со-стражами]
страж \to | выражение0
exp \to exp0 :: [context =>] type (сигнатура типа выражения)
| exp0
expi \to expi+1 [qop(n,i) expi+1]
| lexpi
| rexpi
lexpi \to (lexpi | expi+1) qop(l,i) expi+1
lexp6 \to - exp7
rexpi \to expi+1 qop (r,i) (rexpi | expi+1)
exp10 \to \ apat1 ... apatn -> exp (лямбда-абстракция, n>=1 )
| let decls in exp ( let -выражение)
| if exp tden exp else exp (условное выражение)
| case exp of { alts } ( case -выражение)
| do { stmts } ( do -выражение)
| fexp
fexp \to [fexp] aexp (применение функции)

Перевод:

выражение \to выражение0 :: [контекст \Rightarrow ] тип (сигнатура типа выражения)
| выражение0
выражениеi \to выражениеi+1 [квалифицированный-оператор(n,i) выражениеi+1]
| левое-сечение-выраженияi
| правое-сечение-выраженияi
левое-сечение-выраженияi \to (левое-сечение-выраженияi | выражениеi+1) квалифицированный-оператор(l,i) выражениеi+1
левое-сечение-выражения6 \to - выражение7
правое-сечение-выраженияi \to выражениеi+1 квалифицированный-оператор(r,i) (правое-сечение-выраженияi | выражениеi+1)
выражение10 \to \ такой-как-образец1 ... такой-как-образецn \to выражение (лямбда-абстракция, n>=1 )
| let списки-объявлений in выражение ( let -выражение)
| if выражение tden выражение else выражение (условное выражение)
| case выражение of { список-альтернатив } ( case -выражение)
| do { список-инструкций } ( do -выражение)
| функциональное-выражение
функциональное-выражение \to [функциональное-выражение] выражение-аргумента (применение функции)
aexp \to qvar (переменная)
| gcon (общий конструктор)
| literal
| ( exp ) (выражение в скобках)
| ( exp1 , ... , expk ) (кортеж, k>=2 )
| [ exp1 , ... , expk ] (список, k>=1 )
| [ exp1 [, exp2] .. [exp3] ] (арифметическая последовательность)
| [ exp | qual1 , ... , qualn ] (описание списка, n>=1 )
| ( expi+1 qop(a,i) ) (левое сечение)
| ( lexpi qop(l,i) ) (левое сечение)
| ( qop(a,i)<-> expi+1 ) (правое сечение)
| ( qop(r,i)<-> rexpi ) (правое сечение)
| qcon { fbind1 , ... , fbindn } (именованная конструкция, n>=0 )
| aexp<qcon> { fbind1 , ... , fbindn } (именованное обновление, n >= 1 )

Перевод:

выражение-аргумента \to квалифицированная-переменная (переменная)
| общий-конструктор (общий конструктор)
| литерал
| ( выражение ) (выражение в скобках)
| ( выражение1 , ... , выражениеk ) (кортеж, k>=2 )
| [ выражение1 , ... , выражениеk ] (список, k>=1 )
| [ выражение1 [, выражение2] .. [выражение3] ] (арифметическая последовательность)
| [ выражение | квалификатор1 , ... , квалификаторn ] (описание списка, n>=1 )
| ( выражениеi+1 квалифицированный-оператор(a,i) ) (левое сечение)
| ( левое-сечение-выраженияi квалифицированный-оператор(l,i) ) (левое сечение)
| ( квалифицированный-оператор(a,i)< \to выражениеi+1 ) (правое сечение)
| ( квалифицированный-оператор(r,i)< \to правое-сечение-выраженияi ) (правое сечение)
| квалифицированный-конструктор { связывание-имени-поля1 , ... , связывание-имени-поляn } (именованная конструкция, n>=0 )
| выражение-аргумента<квалифицированный-конструктор> { связывание-имени-поля1 , ... , связывание-имени-поляn } (именованное обновление, n>=1 )
qual \to pat <- exp (генератор)
| let decls (локальное объявление)
| exp (страж)
alts \to alt1 ; ... ; altn (n>=1)
alt \to pat -> exp [where decls]
| pat gdpat [where decls]
| (пустая альтернатива)
gdpat \to gd -> exp [ gdpat ]
stmts \to stmt1 ... stmtn exp [;] (n>=0)
stmt \to exp ;
| pat <- exp ;
| let decls ;
| ; (пустая инструкция)
fbind \to qvar = exp

Перевод:

квалификатор \to образец \gets выражение (генератор)
| let списки-объявлений (локальное объявление)
| выражение (страж)
список-альтернатив \to альтернатива1 ; ... ; альтернативаn (n>=1)
альтернатива \to образец \to выражение [where список-объявлений]
| образец образец-со-стражами [ where список-объявлений]
| (пустая альтернатива)
образец-со-стражами \to страж \to выражение [ образец-со-стражами ]
список-инструкций \to инструкция1 ... инструкцияn выражение [;] (n>=0)
инструкция \to выражение ;
| образец \gets выражение ;
| let список-объявлений ;
| ; (пустая инструкция)
связывание-имени-поля \to квалифицированная-переменная = выражение
< Лекция 9 || Лекция 10: 123456 || Лекция 11 >