Guest User

Untitled

a guest
Apr 15th, 2018
243
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
BNF 4.37 KB | None | 0 0
  1. "Name"     = 'eAthena Script'
  2. "Author"   = 'GreenBox'
  3. "Version"  = '1.0.0.0'
  4. "About"    = ''
  5.  
  6. "Start Symbol" = <Program>
  7.  
  8. ! -------------------------------------------------
  9. ! Character Sets
  10. ! -------------------------------------------------
  11.  
  12. {Hex Digit}      = {Digit} + [abcdefABCDEF]
  13. {Oct Digit}      = [01234567]
  14.  
  15. {ID Head}      = {Letter} + [_]
  16. {ID Tail}      = {Alphanumeric} + [_]
  17. {String Ch} = {Printable} + {HT} - ["\]
  18.  
  19. ! -------------------------------------------------
  20. ! Terminals
  21. ! -------------------------------------------------
  22.  
  23. FunctionName = {ID Head}{ID Tail}*
  24. Id    = ('' | '@' | '#' | '##' '$') {ID Head}{ID Tail}* ('' | '$')
  25.  
  26. StringLiteral    = '"'( {String Ch} | '\'{Printable} )* '"'
  27. DecLiteral       = [123456789]{digit}*
  28. OctLiteral       = 0{Oct Digit}*
  29. HexLiteral       = 0x{Hex Digit}+
  30. FloatLiteral     = {Digit}*'.'{Digit}+
  31.  
  32. Comment Start = '/*'
  33. Comment End   = '*/'
  34. Comment Line  = '//'
  35.  
  36. ! -------------------------------------------------
  37. ! Rules
  38. ! -------------------------------------------------
  39.  
  40. ! The grammar starts below
  41. <Program> ::= <Stm List>
  42.  
  43. ! ===================================================================
  44. ! Statements
  45. ! ===================================================================
  46.  
  47. <Stm>        ::= Id ':'                            !Label
  48.               | if '(' <Expr> ')' <Stm>          
  49.               | if '(' <Expr> ')' <Then Stm> else <Stm>        
  50.               | while '(' <Expr> ')' <Stm>
  51.               | for '(' <Arg> ';' <Arg> ';' <Arg> ')' <Stm>
  52.               | <Normal Stm>
  53.  
  54. <Then Stm>   ::= if '(' <Expr> ')' <Then Stm> else <Then Stm>
  55.               | while '(' <Expr> ')' <Then Stm>
  56.               | for '(' <Arg> ';' <Arg> ';' <Arg> ')' <Then Stm>
  57.               | <Normal Stm>
  58.  
  59. <Normal Stm> ::= do <Stm> while '(' <Expr> ')'
  60.               | switch '(' <Expr> ')' '{' <Case Stms> '}'
  61.               | <Block>      
  62.               | goto Id ';'
  63.               | break ';'
  64.               | continue ';'
  65.               | return <Expr> ';'
  66.               | FunctionName <Expr> ';'
  67.               | FunctionName ';'
  68.               | ';'              !Null statement
  69.  
  70. <Arg>       ::= <Expr>
  71.              |
  72.  
  73. <Case Stms> ::= case <Value> ':' <Stm List> <Case Stms>
  74.              | default ':' <Stm List>                  
  75.              |
  76.  
  77. <Block>     ::= '{' <Stm List> '}'
  78.  
  79. <Stm List>  ::=  <Stm> <Stm List>
  80.              |
  81.            
  82. ! -------------------------------------------------
  83. ! Expressions
  84. ! -------------------------------------------------
  85. <Expr>       ::= <Expr> ',' <Op If>  
  86.               | <Op If>
  87.  
  88. <Op If>      ::= <Op Or> '?' <Op If> ':' <Op If>
  89.               | <Op Or>
  90.  
  91. <Op Or>      ::= <Op Or> '||' <Op And>
  92.               | <Op And>
  93.  
  94. <Op And>     ::= <Op And> '&&' <Op BinOR>
  95.               | <Op BinOR>
  96.  
  97. <Op BinOR>   ::= <Op BinOr> '|' <Op BinXOR>
  98.               | <Op BinXOR>
  99.  
  100. <Op BinXOR>  ::= <Op BinXOR> '^' <Op BinAND>
  101.               | <Op BinAND>
  102.  
  103. <Op BinAND>  ::= <Op BinAND> '&' <Op Equate>
  104.               | <Op Equate>
  105.  
  106. <Op Equate>  ::= <Op Equate> '==' <Op Compare>
  107.               | <Op Equate> '!=' <Op Compare>
  108.               | <Op Compare>
  109.  
  110. <Op Compare> ::= <Op Compare> '<'  <Op Shift>
  111.               | <Op Compare> '>'  <Op Shift>
  112.               | <Op Compare> '<=' <Op Shift>
  113.               | <Op Compare> '>=' <Op Shift>
  114.               | <Op Shift>
  115.  
  116. <Op Shift>   ::= <Op Shift> '<<' <Op Add>
  117.               | <Op Shift> '>>' <Op Add>
  118.               | <Op Add>
  119.  
  120. <Op Add>     ::= <Op Add> '+' <Op Mult>
  121.               | <Op Add> '-' <Op Mult>
  122.               | <Op Mult>
  123.  
  124. <Op Mult>    ::= <Op Mult> '*' <Op Unary>
  125.               | <Op Mult> '/' <Op Unary>
  126.               | <Op Mult> '%' <Op Unary>
  127.               | <Op Unary>
  128.  
  129. <Op Unary>   ::= '!'    <Op Unary>
  130.               | '~'    <Op Unary>  
  131.               | '-'    <Op Unary>
  132.               | '*'    <Op Unary>
  133.               | '&'    <Op Unary>    
  134.               | <Op Array>
  135.  
  136. <Op Array> ::= <Op Array> '[' <Expr> ']'
  137.               | <Value>
  138.              
  139. <Value>       ::= Id
  140.               | OctLiteral
  141.               | HexLiteral
  142.               | DecLiteral  
  143.               | StringLiteral
  144.               | FloatLiteral
  145.               | FunctionName '(' <Expr> ')'
  146.               | FunctionName '(' ')'
  147.               | '(' <Expr> ')'
Add Comment
Please, Sign In to add comment