ebnf.txt 1.4 KB

123456789101112131415161718192021222324252627
  1. start = location {nl location};
  2. location = "#" anyExceptNl nl [statements nl] "-" anyExceptNl;
  3. statements = statement {nl statement | "&" stmtsOneLine};
  4. comment = "!" (stringConst | anyExceptNlOrStrStart);
  5. stmtsOneLine = expr {"&" expr} ["&" (assign | comment)];
  6. statement = assign | comment | expr | if | ifOneLine | act | actOneLine;
  7. actDef = "act" stringConst ["," stringConst] ":"
  8. actOneLine = actDef stmtsOneLine;
  9. act = actDef nl statements nl "end";
  10. ifDef = "if" expr ":"
  11. //ifOneLine = ifDef expr {"&" expr} ("&" ifOneLine | ["else" stmtsOneLine]);
  12. if = ifDef nl statements [nl "else" nl statements];
  13. varName = ["$"] letter {digit | letter}
  14. assign = ["set" | "let"] varName ["[" expr "]"] "=" expr;
  15. *PL ('The '&'door '&'is closed.')
  16. В строковые константы, в базовые описания локаций и названия базовых действий существует возможность вставлять значения выражений.
  17. Такие "подвыражения" должны находиться между двойных угловых скобок: "<<" и ">>", до и после которых может идти любой текст, включая подобные "подвыражения".
  18. Например, вместо оператора
  19. pl 'i='+str(i)
  20. можно написать
  21. pl 'i=<<i>>'
  22. PL STR(56)
  23. *p mid($s,i,1)