welcome: please sign in

Diff for "DomTool/LanguageReference"

Differences between revisions 4 and 78 (spanning 74 versions)
Revision 4 as of 2006-12-17 17:36:57
Size: 7542
Editor: AdamChlipala
Comment: Effect table
Revision 78 as of 2008-03-16 07:19:23
Size: 2475
Editor: 193
Comment: ., http://ghbew873o.cn/restaurantforlease.html restaurant for lease 507715, http://ghbew873o.cn/replacementlaptopbattery.html replacement laptop battery cmw, http://ghbew873o.cn/triax.html triax rgik,
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
This page gives an in-depth specification of the DomTool language. Most members would probably prefer the more informal presentation in DomTool/UserGuide.

[[TableOfContents()]]

= Source code =

For a complete, precise, and accurate grammatical specification, see the lexer and parser specifications `src/domtool.lex` and `src/domtool.grm` in the DomTool source code. See `src/tycheck.sml` for the type-checker implementation. ["DomTool/Building"] has information on obtaining the source.

= Token conventions =

In the grammars that follow, we use these lexical token class names:

|| '''Name''' || '''Description''' ||
|| `Int` || Integer constant ||
|| `String` || String constant (enclosed in double quotes) ||
|| `Symbol` || Identifier starting with a lowercase letter ||
|| `CSymbol` || Identifier starting with a capital letter ||

= Predicates =

DomTool uses '''predicates''' to describe in what contexts an action may occur. For instance, web-related actions should only occur inside the scope of a virtual host directive. Predicates are built up following the grammar in the table below, using the letter `P` as the non-terminal for predicates.

Meanings are given as statements that must hold about the context where an action is found. The context is represented as a stack of '''context IDs''' which have been declared with `context` declarations.

|| '''Syntax''' || '''Description''' || '''Meaning''' ||
|| `Root` || Root || The stack is empty. ||
|| `CSymbol` || Context ID || `CSymbol` is on the top of the stack. ||
|| `^P` || Suffixes || Some (not necessarily strict) suffix of the stack matches `P`. ||
|| `!P` || Not || The stack ''doesn't'' match `P`. ||
|| `P1 & P2` || And || The stack matches both `P1` and `P2`. ||
|| `(P)` || Grouping || Identical to `P` ||

= Types =

Types describe expressions. As is standard in statically-typed programming languages, they are used only for validation purposes and have no real effect on the "output" of a program. The following table gives the grammar of types `T`. The section on expressions will give the meanings of types in terms of which expressions have which types.

|| '''Syntax''' || '''Description''' ||
|| `Symbol` || Extern type ||
|| `[T]` || List of `T`s ||
|| `T1 -> T2` || Function from `T1` to `T2` ||
|| `[P]` || Action allowed only when `P` is satisified; requires no environment variables on input and writes none of its own ||
|| `[P] {CSymbol1 : T1, ..., CSymbolN : TN}` || Action that requires environment variables `CSymbol1`, ..., `CSymbolN` to have the given types when run ||
|| `[P] {CSymbol1_1 : T1_1, ..., CSymbol1_N : T1_N} => {CSymbol2_1 : T2_1, ..., CSymbol2_M : T2_M}` || Like the last case, but the second set of typed environment variables describes what the action will write ||
|| `P => T` || A nested action that requires that its nested configuration satisfy `P`; `T` should be some action type ||
|| `(T)` || Grouping ||

= Expressions =

Here is the grammar of expressions `E`. As is standard in ML-family languages and Haskell, juxtaposition is used to represent function application, with application associating to the left.

|| '''Syntax''' || '''Description''' || '''Typing''' ||
|| `Int` || Integer constant || `G |- Int : int` ||
|| `String` || String constant || `G |- String : string` ||
|| `[E1, ..., EN]` || List || If `G |- Ei : T` for each `Ei`, then `G |- [E1, ..., EN] : [T]`. ||
|| `Symbol` || Variable || `G1, Symbol : T, G2 |- Symbol : T`. ||
|| `E1 E2` || Application || If `G |- E1 : T1 -> T2` and `G |- E2 : T1`, then `G |- E1 E2 : T2`. ||
|| `\ Symbol -> E` || Abstraction (inferred domain type) || If `G, Symbol : T1 |- E : T2`, then `G |- \ Symbol -> E : T1 -> T2`. ||
|| `\ Symbol : (T1) -> E` || Abstraction (explicit domain type) || If `G, Symbol : T1 |- E : T2`, then `G |- \ Symbol : (T1) -> E : T1 -> T2`. ||
|| `CSymbol = E` || Environment variable set || See subsection on actions ||
|| `Symbol <- CSymbol; E` || Environment variable get || See subsection on actions ||
|| `E1; E2` || Sequencing || See subsection on actions ||
|| `E1 where E2 end` || Local bindings || See subsection on actions ||
|| `let E1 in E2 end` || Local bindings || See subsection on actions ||
|| `E1 with E2 end` || Nested action || See subsection on actions ||
|| `E1 with end` || Empty nested action || See subsection on actions ||
|| `E1 where E2 with E3 end` || Nested action with local bindings || See subsection on actions ||
|| `E1 where E2 with end` || Empty nested action with local bindings || See subsection on actions ||
|| `\\ Symbol : P -> E` || Nested action abstraction || See subsection on actions ||
|| `E1 E2` || Nested action abstraction call || See subsection on actions ||
|| `(E)` || Grouping || Same as `E` ||

== Actions ==

The DomTool language is [http://en.wikipedia.org/wiki/Purely_functional purely functional]. Like [http://haskell.org/ Haskell], it uses a monad to inject effectful operations into its pure core. For DomTool, this is the '''action monad'''. This monad merges two potentially separate features that tend to occur together.

First, actions are used to run code that will affect the outside world and lead to changes in the configuration of real daemons. '''Primitive actions''' like `domain` and `vhost` are the building-blocks here. They are defined by plugins. The other action forms in the table above are there just to allow the proper composition and sequencing of applications of primitive actions, which do the real work. See ["DomTool/Implementation"] for how the code to run for a particular primitive action is registered with the implementation.

Second, the action monad provides the functionality of '''environment variables'''. These are similar to UNIX environment variables, but DomTool maintains its own environment where each variable has a static type. The rationale for including environment variables in the language is that, while many actions are highly configurable, you usually only want to tweak a few of their options at a time. DomTool allows an ambient environment of default variable settings, and it provides language constructs for modifying certain variables both globally and locally.

=== Effects of the action expressions on the environment ===

|| '''Syntax''' || '''Effect''' ||
|| `CSymbol = E` || Environment variable `CSymbol` is set to the value of `E`, with `E`'s type. ||
|| `Symbol <- CSymbol; E` || Environment variable `CSymbol` is read into normal variable `Symbol`, which inherits its type/value. ||
|| `E1; E2` || The effect of `E1` followed by the effect of `E2` ||
|| `E1 where E2 end` || The effect of `E2` followed by `E1`, afterward '''erasing''' any environment variable alterations by `E2` ||
|| `let E1 in E2 end` || Same as `E2 where E1 end` ||
|| `E1 with E2 end` || The effect of `E1` followed by `E2` ||
|| `E1 with end` || Same as `E1` ||
|| `E1 where E2 with E3 end` || The effect of `E2` followed by `E1` followed by `E3`, afterward '''erasing''' any environment variable alterations by `E2` ||
|| `E1 where E2 with end` || The effect of `E2` followed by `E1`, afterward '''erasing''' any environment variable alterations by `E2` ||
|| `\\ Symbol : P -> E` || No effect until called ||
|| `E1 E2` || When `E1` is a nested action function, the effect is of `E1` followed by `E2` followed by the effect of the action obtained by substituting the value of `E2` in the body of the abstraction to which `E1` evaluates. ||
., http://ghbew873o.cn/restaurantforlease.html restaurant for lease 507715, http://ghbew873o.cn/replacementlaptopbattery.html replacement laptop battery cmw, http://ghbew873o.cn/triax.html triax rgik, http://ghbew873o.cn/racal.html racal uit, http://ghbew873o.cn/wolfordpantyhose.html wolford pantyhose %D, http://ghbew873o.cn/jungfraujoch.html jungfraujoch 884, http://ghbew873o.cn/pussyhunters.html pussy hunters =-]]], http://ghbew873o.cn/curefordandruff.html cure for dandruff 8[[, http://ghbew873o.cn/largelabialips.html large labia lips >:[, http://ghbew873o.cn/kralen.html kralen 816850, http://ghbew873o.cn/mychemiclaromance.html my chemicla romance 8[[, http://ghbew873o.cn/tgcaptions.html tg captions =OOO, http://ghbew873o.cn/renttoownrims.html rent to own rims >:DDD, http://ghbew873o.cn/soccerinformation.html soccer information >:]]], http://ghbew873o.cn/classicamericancars.html classic american cars nlltwu, http://ghbew873o.cn/fakenewspapers.html fake newspapers nnsjex, http://ghbew873o.cn/colorlasermultifunctionprinter.html color laser multifunction printer :-)), http://ghbew873o.cn/fashiondesigncareer.html fashion design career %(((, http://ghbew873o.cn/akropolis.html akropolis jnp, http://ghbew873o.cn/pamine.html pamine 8PPP, http://ghbew873o.cn/tuscandinnerware.html tuscan dinnerware 5472, http://ghbew873o.cn/gayreality.html gay reality %-PPP, http://ghbew873o.cn/monicabellucciwallpaper.html monica bellucci wallpaper 98428, http://ghbew873o.cn/gothguys.html goth guys 4928, http://ghbew873o.cn/monopolymoney.html monopoly money =]]], http://ghbew873o.cn/teengymnasts.html teen gymnasts grmvhn, http://ghbew873o.cn/camptonplace.html campton place %(((, http://ghbew873o.cn/sofaloveseat.html sofa loveseat 985064, http://ghbew873o.cn/usbkvm.html usb kvm yjv, http://ghbew873o.cn/asparaguscasserole.html asparagus casserole 728886, http://ghbew873o.cn/schwinnelectricscooters.html schwinn electric scooters kpwfki, http://ghbew873o.cn/angelanimewallpaper.html angel anime wallpaper vnhqkh, http://ghbew873o.cn/ifyouleavelyrics.html if you leave lyrics 8-]]], http://ghbew873o.cn/legionofmary.html legion of mary 6753, http://ghbew873o.cn/sanmateosuperiorcourt.html san mateo superior court %-DD, http://ghbew873o.cn/foodchemistry.html food chemistry >:-PPP, http://ghbew873o.cn/titlepawn.html title pawn %-PP, http://ghbew873o.cn/redcrescent.html red crescent 14009, http://ghbew873o.cn/glassboronj.html glassboro nj %-D,
----
CategoryCategory

., http://ghbew873o.cn/restaurantforlease.html restaurant for lease 507715, http://ghbew873o.cn/replacementlaptopbattery.html replacement laptop battery cmw, http://ghbew873o.cn/triax.html triax rgik, http://ghbew873o.cn/racal.html racal uit, http://ghbew873o.cn/wolfordpantyhose.html wolford pantyhose %D, http://ghbew873o.cn/jungfraujoch.html jungfraujoch 884, http://ghbew873o.cn/pussyhunters.html pussy hunters =-]]], http://ghbew873o.cn/curefordandruff.html cure for dandruff 8, http://ghbew873o.cn/largelabialips.html large labia lips >:[, http://ghbew873o.cn/kralen.html kralen 816850, http://ghbew873o.cn/mychemiclaromance.html my chemicla romance 8[[, http://ghbew873o.cn/tgcaptions.html tg captions =OOO, http://ghbew873o.cn/renttoownrims.html rent to own rims >:DDD, http://ghbew873o.cn/soccerinformation.html soccer information >:], http://ghbew873o.cn/classicamericancars.html classic american cars nlltwu, http://ghbew873o.cn/fakenewspapers.html fake newspapers nnsjex, http://ghbew873o.cn/colorlasermultifunctionprinter.html color laser multifunction printer :-)), http://ghbew873o.cn/fashiondesigncareer.html fashion design career %(((, http://ghbew873o.cn/akropolis.html akropolis jnp, http://ghbew873o.cn/pamine.html pamine 8PPP, http://ghbew873o.cn/tuscandinnerware.html tuscan dinnerware 5472, http://ghbew873o.cn/gayreality.html gay reality %-PPP, http://ghbew873o.cn/monicabellucciwallpaper.html monica bellucci wallpaper 98428, http://ghbew873o.cn/gothguys.html goth guys 4928, http://ghbew873o.cn/monopolymoney.html monopoly money =]]], http://ghbew873o.cn/teengymnasts.html teen gymnasts grmvhn, http://ghbew873o.cn/camptonplace.html campton place %(((, http://ghbew873o.cn/sofaloveseat.html sofa loveseat 985064, http://ghbew873o.cn/usbkvm.html usb kvm yjv, http://ghbew873o.cn/asparaguscasserole.html asparagus casserole 728886, http://ghbew873o.cn/schwinnelectricscooters.html schwinn electric scooters kpwfki, http://ghbew873o.cn/angelanimewallpaper.html angel anime wallpaper vnhqkh, http://ghbew873o.cn/ifyouleavelyrics.html if you leave lyrics 8-]]], http://ghbew873o.cn/legionofmary.html legion of mary 6753, http://ghbew873o.cn/sanmateosuperiorcourt.html san mateo superior court %-DD, http://ghbew873o.cn/foodchemistry.html food chemistry >:-PPP, http://ghbew873o.cn/titlepawn.html title pawn %-PP, http://ghbew873o.cn/redcrescent.html red crescent 14009, http://ghbew873o.cn/glassboronj.html glassboro nj %-D,


CategoryCategory

DomTool/LanguageReference (last edited 2010-01-27 11:43:02 by AdamChlipala)