buzz_syntax_bnf

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
buzz_syntax_bnf [2018/07/17 18:02] ilpincybuzz_syntax_bnf [2018/07/17 18:59] (current) ilpincy
Line 1: Line 1:
 +====== Buzz Syntax BNF Specification ======
  
 +For an example-driven explanation of the Buzz syntax, see the [[buzz_syntax_cheatsheet|syntax cheatsheet]]. In what follows, we report a formal [[https://en.wikipedia.org/wiki/Backus%E2%80%93Naur_Form|Backus-Naur Form grammar]] specification.
 +===== Tokens =====
 +
 +An **identifier** in Buzz is defined by this regular expression:
 +
 +  [[:alpha:]_][[:alnum:]_]*
 +
 +The recognized tokens are:
 +
 +^ Token                                   ^ Id                ^
 +| //identifier//                          | ''TOKID''         |
 +| //numeric constant//                    | ''TOKCONST''      |
 +| '''''_string_''''' ''"''_string_''"''   | ''TOKSTRING''     |
 +| ''var''                                 | ''TOKVAR''        |
 +| ''nil''                                 | ''TOKNIL''        |
 +| ''if''                                  | ''TOKIF''         |
 +| ''else''                                | ''TOKELSE''       |
 +| ''function''                            | ''TOKFUN''        |
 +| ''return''                              | ''TOKRETURN''     |
 +| ''for''                                 | ''TOKFOR''        |
 +| ''while''                               | ''TOKWHILE''      |
 +| ''and'', ''or''                         | ''TOKLANDOR''     |
 +| ''not''                                 | ''TOKLNOT''       |
 +| ''+'', ''-''                            | ''TOKADDSUB''     |
 +| ''*'', ''/''                            | ''TOKMULDIV''     |
 +| ''%''                                   | ''TOKMOD''        |
 +| ''^''                                   | ''TOKPOW''        |
 +| ''<<'' ''>>''                           | ''TOKLRSHIFT''    |
 +| ''&'' ''|''                             | ''TOKBANDOR''     |
 +| ''!''                                   | ''TOKBNOT''       |
 +| ''{''                                   | ''TOKBLOCKOPEN''  |
 +| ''}''                                   | ''TOKBLOCKCLOSE'' |
 +| ''(''                                   | ''TOKPAROPEN''    |
 +| '')''                                   | ''TOKPARCLOSE''   |
 +| ''[''                                   | ''TOKIDXOPEN''    |
 +| '']''                                   | ''TOKIDXCLOSE''   |
 +| '';'' ''\n''                            | ''TOKSTATEND''    |
 +| '',''                                   | ''TOKLISTSEP''    |
 +| ''=''                                   | ''TOKASSIGN''     |
 +| ''.''                                   | ''TOKDOT''        |
 +| ''<'' ''<='' ''>'' ''>='' ''=='' ''!='' | ''TOKCMP''        |
 +
 +===== Grammar =====
 +
 +  script             ::= statlist
 +
 +  statlist           ::= stat | statlist stat
 +  stat               ::= <nil> | vardef | fundef | if | loop | command
 +
 +  block              ::= TOKBLOCKOPEN statlist TOKBLOCKCLOSE
 +
 +  vardef             ::= TOKVAR TOKID | TOKVAR TOKID assignment
 +  fundef             ::= TOKFUN TOKID TOKPAROPEN idlist TOKPARCLOSE block
 +  if                 ::= TOKIF TOKPAROPEN condition TOKPARCLOSE block endif
 +  endif              ::= <nil> |  TOKELSE block
 +  loop               ::= forloop | whileloop
 +  forloop            ::= TOKFOR TOKPAROPEN idref TOKASSIGN expression TOKLISTSEP condition TOKLISTSEP idref TOKASSIGN expression TOKPARCLOSE block
 +  whileloop          ::= TOKWHILE TOKPAROPEN condition TOKPARCLOSE block
 +
 +  conditionlist      ::= condition | conditionlist TOKLISTSEP condition
 +  condition          ::= comparison | condition TOKLANDOR comparison | TOKLNOT condition
 +  comparison         ::= expression | expression TOKCMP expression
 +
 +  expression         ::= product | expression TOKADDSUB product
 +  product            ::= modulo | product TOKMULDIV modulo
 +  modulo             ::= power | modulo TOKMOD power
 +  power              ::= bitshift powerrest
 +  powerrest          ::= <nil> | TOKPOW power
 +  bitshift           ::= bitwiseandor | operand TOKLRSHIFT bitwiseandor
 +  bitwiseandor       ::= bitwisenot | bitwiseandor TOKBANDOR bitwisenot
 +  bitwisenot         ::= operand | TOKBNOT bitwisenot
 +  operand            ::= TOKNIL | TOKCONST | TOKSTRING | TOKPAROPEN condition TOKPARCLOSE | TOKADDSUB power | idref | lambda | tabledef
 +
 +  command            ::= idref | idref assignment | TOKRETURN expression
 +  assignment         ::= TOKASSIGN expression
 +
 +  tabledef           ::= TOKBLOCKOPEN TOKBLOCKCLOSE | TOKBLOCKOPEN tablefielddeflist TOKBLOCKCLOSE
 +  tablefielddef      ::= TOKDOT TOKID assignment | TOKDOT TOKCONST assignment
 +  tablefielddeflist  ::= tablefielddef | tablefielddeflist TOKLISTSEP tablefielddef
 +
 +  idlist             ::= <nil> | TOKID | idlist TOKLISTSEP TOKID
 +  idreflist          ::= idref | idreflist TOKLISTSEP idref
 +  idref              ::= TOKID | idref TOKDOT TOKID | idref TOKIDXOPEN expression TOKIDXCLOSE | idref TOKPAROPEN conditionlist TOKPARCLOSE
 +
 +  lambda             ::= TOKFUN TOKPAROPEN idlist TOKPARCLOSE block
  • buzz_syntax_bnf.txt
  • Last modified: 2018/07/17 18:59
  • by ilpincy