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
continue-statement:
continue [label] `;'
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] `;'
if-expression:
if condition then expression {elseif condition then expression} else expression 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}] )
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}
select-statement:
select statements {or statements} end [select] `;'
statements:
{assert-statement | assignment | break-statement | choose-statement | continue-statement | define-statement | error-statement | foreach-statement | if-statement | select-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 `)') | if-expression
variable*:
`$' identifier