# PL/XML Syntax
Programs that do not respect this syntax may (and probably
will) still work, but with no guarantee.
## McKeeman Form
```
plxml
program
program
"" functions main functions ""
tag
'"' characters '"'
characters
''
character characters
character
'0020' . '10FFFF' - '"' - '0027' - '<' - '>' - '&'
'&' escapes ';'
ws
""
'0020' ws
'000A' ws
'000D' ws
'0009' ws
escapes
"quot"
"apos"
"lt"
"gt"
"amp"
main
ws "" instructions "" ws
functions
""
function functions
function
ws "" arguments body "" ws
arguments
ws "" arguments "" ws
_arguments
""
argument _arguments
argument
ws "" ws
body
ws "
" instructions "" ws
instructions
ws "" ws
instruction instructions
instruction
ws _instruction ws
_instruction
value
assign
integer
float
string
array
add
subtract
multiply
divide
and
or
not
equal
greater
lower
call
return
if
for
each
while
handle
value
""
assign
"" instruction ""
integer
""
"" instruction ""
float
""
"" instruction ""
string
""
"" instruction ""
array
"" instructions ""
""
add
"" instructions ""
subtract
"" instructions ""
multiply
"" instructions ""
divide
"" instructions ""
and
"" instructions ""
or
"" instructions ""
not
"" instruction ""
equal
"" instruction instruction ""
greater
"" instruction instruction ""
lower
"" instruction instruction ""
call
"" call_arguments ""
"" instruction call_arguments ws ""
call_arguments
ws "" instructions "" ws
return
"" instruction ""
if
"" instruction then ""
"" instruction then else ""
then
ws "" instructions "" ws
else
ws "" instructions "" ws
each
"" instruction do ""
while
"" instruction do ""
for
"" ws from to step do ""
from
ws "" instruction "" ws
to
ws "" instruction "" ws
step
ws "" instruction "" ws
do
ws "" instructions "" ws
handle
ws "" try catch "" ws
try
ws "" instructions "" ws
catch
ws "" instructions "" ws
```