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}] [‘Edigit {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