// Linguagem para formatar algoritmo
//
// exemplo
//
//
/*
procedure w
if i
then
{k1}
{k2}
end
for k do
{lalala}
if x then
{y}
{z}
else
{u}
{v}
end
next
{w}
end
*/
start= procedure
procedure = "procedure" _ id:identifier sb:statementblock _ "end" _
{ return "
PROCEDURE "+id+ "
"+sb;}
inputs = "inputs" identifier ("," identifier)* nl
statement = ifstatement / forstatement / free
statementblock= s:(_ statement)*
{var st="";
for (var k=0; k"+s[k][1];
st=st+"
"
return st;}
free = "{" f:freesentence "}" nl {return f;}
freesentence = (char+ _)* {return text();}
ifstatement
= "if" _ cond:identifier _ "then" _ then:statementblock
el:(_ "else" x:statementblock)? _ "end" nl
{return "IF "+cond+"
THEN "+ then+ "
ELSE "+el+"";}
forstatement
= "for" _ cond:identifier _
"do" _ dob:statementblock _ "next" nl
{return "FOR "+cond+"
DO "+ dob +"";}
identifier = letter char* {return text();}
char=letter/digit
digit=[0-9]
letter=[a-zA-Z]
_ "whitespace"
= [ \t\n\r]*
nl= [\n] _