Синтаксис команд языка QPILE

Program:

  Statement_List
Statement_List:
  Statement "\n"
  Statement_List "\n" Statement
Statement:
  NAME=Expression
  IFOperator
  FOROperator
  FUNCDescr
  CONTINUE   //пропускает выполнение операторов до конца текущего Statement_List
  BREAK    //начинает выполнение оператора следующего за текущим Statement_List
  RETURN   //выход из текущего управляющего блока – из тела функции или из всей программы
IFOperator:
"IF " Condition "\n"
  Statement_List 
"ELSE" "\n"
  Statement_List
"END IF"
 
Condition
  Condition "OR" Condition
  Condition "AND" Condition
  "("Condition") "
  PrimaryCondition
PrimaryCondition
  Expression "==" Expression
  Expression "=" Expression //c той же семантикой, что и "=="
  Expression ">=" Expression
  Expression "<=" Expression
  Expression >"Expression
  Expression "<"Expression
  Expression "!=" Expression
  Expression "<>" Expression //c той же семантикой, что и "!="
FOROperator:
  "FOR  " NAME " IN  " ArgList   "\n"
   Statement_List
  "END FOR"
  "FOR " NAME " FROM " Expression " TO " Expression "\n"
   Statement_List
  "END FOR"
 
ArgList
NAME   // в этом случае переменная с именем NAME должна содержать значение вида ArgList1
  ArgList1
ArgList1:
  Expression
ArgList "," Expression
FUNCDescr
  "FUNC " NAME "(" FargList ")" "\n"
   Statement_List
  "END FUNC"
FArgList
NAME
FArgList "," NAME
Expression:
  Expression "+" Term  
  Expression "–" Term
  Expression "&" Term   //конкатенация строк
  Term
Term:
  Term "/" Primary
  Term "*"Primary
  Primary
Primary:
  NUMBER
  STRINGNAME   //значение переменной с именем NAME
  "-" Primary
"(" Expression ")"
FunctionCall
FunctionCall
FNAME "(" ArgList1")"
NUMBER:
  Digits
  Digits "."DigitsSTRING:  //определяется стандартно
NAME:     //определяется стандартно
 
Ключевые слова = {IF, ELSE, FOR, IN, TO, FROM, AND, OR, RESULT, FUNC, END FUNC, END FOR, END IF, CONTINUE, BREAK, RETURN}