Previous: Files, Up: The Language



6.13 Summary of the Malaga Syntax

The syntax of Malaga source texts is defined formally by a sort of EBNF notation:

The start productions for Malaga source texts are lexicon-file, rule-file, and symbol-file. A nonterminal marked with * in its definition is a lexical symbol.

assert-statement:
(assert | !) condition ;
assignment:
path (:= | :=+ | :=- | :=* | :=/) expression ; | < path {, path} > := expression ;
break-statement:
break [label] ;
choose-statement:
choose variable in expression ;
comment*:
# {printing-char}
comparison:
[not] (expression [comparison-operator expression] | match-comparison)
comparison-operator:
= | /= | ~ | /~ | in | less | greater | less_equal | greater_equal
condition:
comparison ({and comparison} | {or comparison})
constant*:
@ identifier
constant-definition:
(define | default) constant := constant-expression ;
constant-expression:
expression
define-statement:
define variable := expression ; | define < variable {, variable} > := expression ;
error-statement:
error expression ;
expression:
term {(+ | -) term}
factor:
value {. value}
foreach-statement:
[label :] foreach variable in expression : statements end [foreach] ;
identifier*:
(letter | _ | &) {letter | digit | _ | &}
if-statement:
if condition then statements {elseif condition then statements} [else statements] end [if] ;
include:
include string ;
initial:
initial constant-expression , rule-set ;
label:
identifier
lexicon-file:
{constant-definition | constant-expression ;}
list:
< {expression {, expression}} >
match:
constant-expression [: variable] | variable : constant-expression
match-comparison:
expression matches ( ( match {, match} ) | match {, match} )
number*:
digit {digit} ( L | R | [. digit {digit}] [E digit {digit}] )
parallel-statement:
parallel statements {or statements} end [parallel] ;
path:
variable {. value}
record:
[ {symbol-value-pair {, symbol-value-pair}} ]
repeat-statement:
repeat statements while condition ; statements end [repeat] ;
require-statement:
(require | ?) condition ;
result-statement:
result expression [, (rule-set | accept)] ;
return-statement:
return expression ;
rule:
rule-type rule-name ( variable {, variable} ) : statements end [rule-type] [rule-name] ;
rule-file:
{rule | constant-definition | initial | include}
rule-name:
identifier
rule-set:
rules (rules {else rules} | ( rules {else rules} ))
rule-type:
allo_rule | combi_rule | end_rule | pruning_rule | robust_rule | input_filter | output_filter | subrule
rules:
rule-name {, rule-name}
statements:
{assert-statement | assignment | choose-statement | define-statement | error-statement | foreach-statement | if-statement | parallel-statement | repeat-statement | require-statement | result-statement | return-statement | stop-statement}
stop-statement:
stop ;
string*:
" {char-except-double-quotes | \" | \\} "
subrule-invocation:
rule-name ( expression {, expression}
symbol:
identifier
symbol-definition:
symbol [:= < symbol {, symbol} >] ;
symbol-file:
{symbol-definition | include}
symbol-value-pair:
expression : expression
term:
factor {(* | /) factor}
value:
[-] (symbol | string | number | list | record | constant | subrule-invocation | variable | ( condition ))
variable*:
$ identifier