Up Previous Next Title Page Index Contents

5.3.10 Syntax

STRING: "'" CHAR* "'"
where CHAR is any character; a ' character must be doubled
NUMBER: ("0".."9")+
NAMECHAR: "a".."z" | "0".."9" | " " | {_+-[]?} | INTLNAMECHAR | ESCAPECHAR
INTLNAMECHAR: {äëïöü} | {áéíóú} | {àèìòù} | {âêîôû} | {ñãœçÿ} | {߀} | {¿¡«»}
ESCAPECHAR: "\" ECHAR
where ECHAR is anything that is not a letter number or underscore
NAME: NAMECHAR+
If NAME contains a space, the whole name should have a ";" after it, or one of ".>~#" forming the start of the next element in a chainClause
WILDNAME: ["^"] (NAMECHAR | "*" | "#")+
If WILDNAME contains a space, the whole name should have a ";" after it.
# Design element access and output commands (5.3.2)
chainOutputClause: (propClauseWithLevel | propClause | (graphEltClause+ propClause)) [";"] [translatorNames] [";"];
translatorNames: ("%" <NAMECHAR>+)+;
propClauseWithLevel: propClause levelNumber [";"];
levelNumber: [";"] " "* ["-"] <NUMBER>+;
propClause: ":" (<NAME> | "()");
graphEltClause: (objClause | relClause | roleClause | portClause) [";"]
objClause: "." typeChoiceClause
relClause: ">" typeChoiceClause
roleClause: "~" typeChoiceClause
portClause: "#" typeChoiceClause
typeChoiceClause: NAME
| "()"
| "( " WILDNAME {" | " WILDNAME}* ")"
# General commands (5.3.3)
report: oldreport | newreport;
oldreport: "report" <STRING> clause* "endreport";
newreport: [newheadersection] clause*;
newheadersection: <NAME> ["(" [<NAME> ("," <NAME>)*] ")" ];
clause: (comment
| basicClause
| ifClause
| loop
| subreportClause
| fileClause
| md5Clause
| executeClause
| promptAskClause
| variableAssign
| variableClause
| translationClause
| mathClause
| chainOutputClause
;
comment: <comment>;
basicClause: atomicClause | iterableClause;
atomicClause: newlineClause | separatorClause | literal | variableRef | simpleClause;
newlineClause: "newline" [";"];
separatorClause: "sep" [";"];
literal: <STRING> [translatorNames] [";"];
variableRef : "$" <NAME> [translatorNames] [";"];
simpleClause: ("id" | "type" | "metatype" | "oid" | "projectid" | "objectid" | "project") [levelNumber] [";"] [translatorNames] [";"]
|
("x" | "y" | "left" | "right" | "top" | "bottom" | "centerX" | "centerY" | "width" | "height" | "area") [levelNumber] [";"] [translatorNames] [";"];
iterableClause: ("decompositions" | "explosions" | "containers" | "contents" | "stack" | "graphs") [";"];
# Control and navigation commands (5.3.4)
ifClause: "if" [condition]
"then" [";"] (clause* | ";")
["else" [";"] clause*]
"endif" [";"];
condition: ("not" condition)
| (condition "and" condition)
| (condition "or" condition)
| ("(" condition ")")
| expression;
expression: comparison | unary;
unary: comparableClause;
comparison: comparableClause comp comparableClause
["num"];
comparableClause : atomicClause | chainClause;
comp: "<" | ">" | "<=" | ">=" | "=" | "<>" | "=~" | "=/";
loop: ("do" | "dowhile")
(chainClause | atomicClause)
[whereClause] [filterClause]
"{" clause* "}" [";"]
|
"foreach"
graphEltClause [";"]
[whereClause] [filterClause]
"{" clause* "}" [";"];
chainClause: (chainElementClause [levelNumber] [";"])+;
chainElementClause: graphEltClause | propClause | iterableClause;
whereClause: "where" condition;
filterClause: orderbyClause [uniqueClause]
| uniqueClause;
orderbyClause : "orderby" orderCriterion ("," orderCriterion)*;
uniqueClause : "unique" [clause+ ("," clause+)*];
orderCriterion: clause+ ["num"] ["asc" | "desc"];
subreportClause: ("subreport" | "subgenerator") [";"] clause* "run" [";"];
# External I/O commands (5.3.5)
fileClause: outputFileClause | filenameReadClause | filenamePrintClause;
outputFileClause: "filename" [";"] clause*
["encoding" [";"] clause+]
["md5start" [";"] clause+]
["md5stop" [";"] clause+]
modeClause clause*
"close" [";"];
modeClause: ("write" | "merge" | "append") [";"];
filenameReadClause: "filename" [";"] clause*
["encoding" [";"] clause+]
"read" [";"];
filenamePrintClause: "filename" [";"] clause* "print" [";"];
md5Clause: "md5id" [";"] clause* "md5Block" [";"]
clause*
"md5sum" [";"];
executeClause: ("external" | "internal") [";"]
clause*
("execute" | "executeBlocking") [";"];
promptAskClause: "prompt" [";"] clause* "ask" [";"];
# String and number commands (5.3.6)
variableClause: variableReadClause | variableWriteClause;
variableReadClause: "variable" [";"] clause+ "read" [";"];
variableWriteClause: "variable" [";"] clause+
variableModeClause clause* [";"]
"close" [";"];
variableModeClause: ("write" | "append") [";"];
variableAssign: "$" <NAME> "=" [";"] (variableAssign | basicClause | chainOutputClause);
translationClause: "to" [";"] clause*
["translate" [";"] clause*]
"endto" [";"];
mathClause: "math" [";"] clause* "evaluate" [";"];

Up Previous Next Title Page Index Contents