<< Prev | - Up - |
Input
<input> ::= parseError
| [
<compilation unit>]
Compilation Units
<compilation unit> ::= <phrase> | <directive> | fDeclare(
<phrase><phrase>
<coord>
)
<directive> ::= dirSwitch([
<switch>])
| dirPushSwitches
| dirPopSwitches
| dirLocalSwitches
<switch> ::= on(
<switch name><coord>
)
| off(
<switch name><coord>
)
<switch name> ::= <atom>
Phrases
At the syntactical level, statements can in general not be distinguished from expressions. Both are subsumed by <phrase>.
<phrase> ::= fStepPoint(
<phrase><atom>
<coord>
)
| fAnd(
<phrase><phrase>
)
| fEq(
<phrase><phrase>
<coord>
)
| fAssign(
<phrase><phrase>
<coord>
)
| fOrElse(
<phrase><phrase>
<coord>
)
| fAndThen(
<phrase><phrase>
<coord>
)
| fOpApply(
<atom>[
<phrase>]
<coord>)
| fOpApplyStatement(
<atom>[
<phrase>]
<coord>
)
| fObjApply(
<phrase><phrase>
<coord>
)
| fAt(
<phrase><coord>
)
| <atom literal> | <variable> | <wildcard> | fSelf(
<coord>)
| fDollar(
<coord>)
| <int literal> | fFloat(
<float><coord>
)
| fRecord(
<label>[
<record argument>])
| fOpenRecord(
<label>[
<record argument>])
| fApply(
<phrase>[
<phrase>]
<coord>)
| fProc(
<phrase>[
<phrase>]
<phrase>[
<proc flag>]
<coord>)
| fFun(
<phrase>[
<phrase>]
<phrase>[
<proc flag>]
<coord>)
| fFunctor(
<phrase>[
<functor descriptor>]
<coord>)
| fClass(
<phrase>[
<class descriptor>]
[
<meth>]
<coord>)
| fLocal(
<phrase><phrase>
<coord>
)
| fBoolCase(
<phrase><phrase>
<opt else>
<coord>
)
| fCase(
<phrase>[
<case clause>]
<opt else>
<coord>
)
| fLockThen(
<phrase><phrase>
<coord>
)
| fLock(
<phrase><coord>
)
| fThread(
<phrase><coord>
)
| fTry(
<phrase><catch>
<finally>
<coord>
)
| fRaise(
<phrase><coord>
)
| fSkip(
<coord>)
<label> ::= <atom literal> | <naked variable>
<atom literal> ::= fAtom(
<literal><coord>
)
<naked variable> ::= fVar(
<atom><coord>
)
<variable> ::= <naked variable> | fEscape(
<naked variable><coord>
)
<wildcard> ::= fWildcard(
<coord>)
<int literal> ::= fInt(
<int><coord>
)
<record argument> ::= <phrase> | fColon(
<feature><phrase>
)
For the moment, the only recognized flags are instantiate
, lazy
, dynamic
, and native
.
<proc flag> ::= <atom>
Functors
<functor descriptor> ::= fRequire([
<import decl>]
<coord>)
| fPrepare(
<phrase><phrase>
<coord>
)
| fImport([
<import decl>]
<coord>)
| fExport([
<export decl>]
<coord>)
| fDefine(
<phrase><phrase>
<coord>
)
<import decl> ::= fImportItem(
<naked variable>[
<aliased feature>]
<opt import at>
)
<aliased feature> ::= <feature no var> | <naked variable> #
<feature no var>
<opt import at> ::= fNoImportAt
| fImportAt(
<atom literal>)
<export decl> ::= fExportItem(
<export item>)
<export item> ::= <naked variable> | fColon(
<feature no var><naked variable>
)
Classes
<class descriptor> ::= fFrom([
<phrase>]
<coord>)
| fProp([
<phrase>]
<coord>)
| fAttr([
<attr or feat>]
<coord>)
| fFeat([
<attr or feat>]
<coord>)
<attr or feat> ::= <escaped feature> | <escaped feature> #
<phrase>
<meth> ::= fMeth(
<meth head><phrase>
<coord>
)
<meth head> ::= <meth head 1> | fEq(
<meth head 1><naked variable>
<coord>
)
<meth head 1> ::= <atom literal> | <variable> | fRecord(
<meth head label>[
<meth argument>])
| fOpenRecord(
<meth head label>[
<meth argument>])
<meth head label> ::= <atom literal> | <variable>
<meth argument> ::= fMethArg(
<meth arg term><default>
)
| fMethColonArg(
<feature><meth arg term>
<default>
)
<meth arg term> ::= <naked variable> | <wildcard> | fDollar(
<coord>)
<default> ::= fNoDefault
| fDefault(
<phrase><coord>
)
Features
<feature no var> ::= <atom literal> | <int literal>
<feature> ::= <feature no var> | <naked variable>
<escaped feature> ::= <feature no var> | <variable>
Other
<case clause> ::= fCaseClause(
<pattern><phrase>
)
<pattern> ::= <phrase> | fSideCondition(
<phrase><phrase>
<phrase>
<coord>
)
<catch> ::= fNoCatch
| fCatch([
<case clause>]
<coord>)
<finally> ::= fNoFinally
| <phrase>
<opt else> ::= fNoElse(
<coord>)
| <phrase>
Coordinates
Each triple consisting of an <atom> and two <int>s denotes a file name (''
if none known), a line number (starting at 1
; required) and a column number (starting at 0
; ~1
if none known). If two triples are given, then they denote the starting and ending coordinates of a construct. A pos
may be turned into a fineStep
or a coarseStep
, denoting a step point for debugging. unit
is an unknown coordinate.
<coord> ::= pos(
<atom><int>
<int>
)
| pos(
<atom><int>
<int>
<atom>
<int>
<int>
)
| fineStep(
<atom><int>
<int>
)
| fineStep(
<atom><int>
<int>
<atom>
<int>
<int>
)
| coarseStep(
<atom><int>
<int>
)
| coarseStep(
<atom><int>
<int>
<atom>
<int>
<int>
)
| unit
<phrase> += <fd expression> | fFail(
<coord>)
| fNot(
<phrase><coord>
)
| fCond([
<clause>]
<opt else><coord>
)
| fOr([
<clause opt then>]
<coord>)
| fDis([
<clause opt then>]
<coord>)
| fChoice([
<phrase>]
<coord>)
<fd expression> ::= fFdCompare(
<atom><phrase>
<phrase>
<coord>
)
| fFdIn(
<atom><phrase>
<phrase>
<coord>
)
<clause> ::= fClause(
<phrase><phrase>
<phrase>
)
<clause opt then> ::= fClause(
<phrase><phrase>
<opt then>
)
<opt then> ::= fNoThen(
<coord>)
| <phrase>
<compilation unit> += fSynTopLevelProductionTemplates([
<prod clause>])
<phrase> += fScanner(
<naked variable>[
<class descriptor>] [
<meth>]
[
<scanner rule>]
<atom><coord>
)
| fParser(
<naked variable>[
<class descriptor>] [
<meth>]
<token clause>
[
<parser descriptor>]
<int><coord>
)
<grammar symbol> ::= <atom literal> | <naked variable>
Scanners
<scanner rule> ::= fMode(
<naked variable>[
<mode descriptor>])
| <lex clause>
<mode descriptor> ::= fInheritedModes([
<naked variable>])
| <lex clause>
<lex clause> ::= fLexicalAbbreviation(
<grammar symbol><regex>
)
| fLexicalRule(
<regex><phrase>
)
<regex> ::= <string>
Parsers
<token clause> ::= fToken([
<token decl>])
<token decl> ::= <atom literal> | <atom literal> #
<phrase>
<parser descriptor> ::= <prod clause> | <syntax rule>
<prod clause> ::= fProductionTemplate(
<prod key>[
<prod param>]
[
<syntax rule>] [
<syn expression>]
[
<prod ret>])
<prod param> ::= <naked variable> | <wildcard>
<prod key> ::= none#
<string>| <atom> #
<string>
<prod ret> ::= none
| <naked variable> | fDollar(
<coord>)
<syntax rule> ::= fSyntaxRule(
<grammar symbol>[
<syn formal>]
<syn expression>
)
<syn formal> ::= <naked variable> | <wildcard> | fDollar(
<coord>)
<syn expression> ::= fSynApplication(
<grammar symbol>[
<phrase>])
| fSynAction(
<phrase>)
| fSynSequence([
<naked variable>] [
<syn expression>])
| fSynAlternative([
<syn expression>])
| fSynAssignment(
<variable><syn expression>
)
| fSynTemplateInstantiation(
<prod key>[
<syn expression>]
<coord>
)
<< Prev | - Up - |