# Ola Language Grammar

## Rule SourceUnit

![SourceUnit](https://1912480449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FIkmJjA7V0dinN4GNreme%2Fuploads%2Fgit-blob-601819b85083315bf9297f16f9557c15f89835aa%2Fsourceunit.svg?alt=media)

```ebnf
rule SourceUnit ::=
    SourceUnitPart *  
  ;

```

## Rule SourceUnitPart

![SourceUnitPart](https://1912480449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FIkmJjA7V0dinN4GNreme%2Fuploads%2Fgit-blob-b86d52ccfd8a0b7b8a43ca5b6e6fd33a43b655e6%2Fsourceunitpart.svg?alt=media)

```ebnf
rule SourceUnitPart ::=
    ContractDefinition 
  | ImportDirective 
  ;

```

## Rule ImportDirective

![ImportDirective](https://1912480449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FIkmJjA7V0dinN4GNreme%2Fuploads%2Fgit-blob-4f4f4f638c607a553495ff1d5ff879b03340403f%2Fimportdirective.svg?alt=media)

```ebnf
rule ImportDirective ::=
     'import' StringLiteral  ';' 
  |  'import' StringLiteral  'as' Identifier  ';' 
  ;

```

## Rule Type

![Type](https://1912480449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FIkmJjA7V0dinN4GNreme%2Fuploads%2Fgit-blob-766e573357d727ad9c1b42448de1fcdcc9e15e65%2Ftype.svg?alt=media)

```ebnf
rule Type ::=
     'bool' 
  |  'u32' 
  |  'u64' 
  |  'u256' 
  |  'address' 
  |  'field' 
  |  'hash' 
  |  'fields' 
  |  'string' 
  |  'mapping'  '(' Precedence0 Identifier ?   '=>' Precedence0 Identifier ?   ')' 
  ;

```

## Rule StorageLocation

![StorageLocation](https://1912480449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FIkmJjA7V0dinN4GNreme%2Fuploads%2Fgit-blob-355a3a34236ec3773c426e08f49b85cc5df68a11%2Fstoragelocation.svg?alt=media)

```ebnf
rule StorageLocation ::=
     'memory' 
  |  'storage' 
  ;

```

## Rule IdentifierOrError

![IdentifierOrError](https://1912480449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FIkmJjA7V0dinN4GNreme%2Fuploads%2Fgit-blob-f020f8c70324ddc0e5ad9fb44f111ff67ce521b0%2Fidentifierorerror.svg?alt=media)

```ebnf
rule IdentifierOrError ::=
    Identifier 
  | 
  ;

```

## Rule VariableDeclaration

![VariableDeclaration](https://1912480449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FIkmJjA7V0dinN4GNreme%2Fuploads%2Fgit-blob-82d465db8c7353e3bd289d5b89cea6e9413c7e54%2Fvariabledeclaration.svg?alt=media)

```ebnf
rule VariableDeclaration ::=
    Precedence0 StorageLocation ?  IdentifierOrError 
  ;

```

## Rule StructDefinition

![StructDefinition](https://1912480449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FIkmJjA7V0dinN4GNreme%2Fuploads%2Fgit-blob-06933ae5130840f0b6f13d31c052c0d8e9138aee%2Fstructdefinition.svg?alt=media)

```ebnf
rule StructDefinition ::=
     'struct' IdentifierOrError  '{' ( VariableDeclaration  ';' ) *   '}' 
  ;

```

## Rule ContractPart

![ContractPart](https://1912480449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FIkmJjA7V0dinN4GNreme%2Fuploads%2Fgit-blob-e846999173b1ece0dc3042947f80f576ce5dcd82%2Fcontractpart.svg?alt=media)

```ebnf
rule ContractPart ::=
    StructDefinition 
  | EnumDefinition 
  | VariableDefinition 
  | FunctionDefinition 
  | TypeDefinition 
  |  ';' 
  ;

```

## Rule ContractDefinition

![ContractDefinition](https://1912480449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FIkmJjA7V0dinN4GNreme%2Fuploads%2Fgit-blob-50ddf89b1405350c6e5f4b9694ce65094c5777dd%2Fcontractdefinition.svg?alt=media)

```ebnf
rule ContractDefinition ::=
     'contract' IdentifierOrError  '{' ( ContractPart ) *   '}' 
  ;

```

## Rule EnumDefinition

![EnumDefinition](https://1912480449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FIkmJjA7V0dinN4GNreme%2Fuploads%2Fgit-blob-d1d34b9ea61d80f3d36f4973ff56eed40a826c1d%2Fenumdefinition.svg?alt=media)

```ebnf
rule EnumDefinition ::=
     'enum' IdentifierOrError  '{' Comma!(IdentifierOrError)  '}' 
  ;

```

## Rule VariableDefinition

![VariableDefinition](https://1912480449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FIkmJjA7V0dinN4GNreme%2Fuploads%2Fgit-blob-e06c13896e0be29a28aabf5ab47c4ba44cfb72a4%2Fvariabledefinition.svg?alt=media)

```ebnf
rule VariableDefinition ::=
    Precedence0 VariableAttribute *  IdentifierOrError (  '=' Expression ) ?   ';' 
  | Precedence0 VariableAttribute *  Identifier  ';' 
  ;

```

## Rule TypeDefinition

![TypeDefinition](https://1912480449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FIkmJjA7V0dinN4GNreme%2Fuploads%2Fgit-blob-3a7961ba35825c39521792d2dd20d8c1d3561abb%2Ftypedefinition.svg?alt=media)

```ebnf
rule TypeDefinition ::=
     'type' Identifier  '=' Precedence0  ';' 
  ;

```

## Rule VariableAttribute

![VariableAttribute](https://1912480449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FIkmJjA7V0dinN4GNreme%2Fuploads%2Fgit-blob-ba1aac4c64374dcd649a47bf9421eaee8b12c406%2Fvariableattribute.svg?alt=media)

```ebnf
rule VariableAttribute ::=
     'const' 
  |  'mut' 
  ;

```

## Rule Expression

![Expression](https://1912480449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FIkmJjA7V0dinN4GNreme%2Fuploads%2Fgit-blob-7c16b8fe8cad14f09fbadc5553cadc14c47caedc%2Fexpression.svg?alt=media)

```ebnf
rule Expression ::=
    Precedence14 
  ;

```

## Rule Precedence14

![Precedence14](https://1912480449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FIkmJjA7V0dinN4GNreme%2Fuploads%2Fgit-blob-cdfa2b74c23da1531a256f5ebdf000d5a4acd259%2Fprecedence14.svg?alt=media)

```ebnf
rule Precedence14 ::=
    Precedence13  '=' Precedence14 
  | Precedence13  '|=' Precedence14 
  | Precedence13  '^=' Precedence14 
  | Precedence13  '&=' Precedence14 
  | Precedence13  '<<=' Precedence14 
  | Precedence13  '>>=' Precedence14 
  | Precedence13  '+=' Precedence14 
  | Precedence13  '-=' Precedence14 
  | Precedence13  '*=' Precedence14 
  | Precedence13  '/=' Precedence14 
  | Precedence13  '%=' Precedence14 
  | Precedence13  '?' Precedence14  ':' Precedence14 
  | Precedence13 
  ;

```

## Rule Precedence13

![Precedence13](https://1912480449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FIkmJjA7V0dinN4GNreme%2Fuploads%2Fgit-blob-823bf01d326ed3095c0043294e083bc3f5442817%2Fprecedence13.svg?alt=media)

```ebnf
rule Precedence13 ::=
    Precedence13  '||' Precedence12 
  | Precedence12 
  ;

```

## Rule Precedence12

![Precedence12](https://1912480449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FIkmJjA7V0dinN4GNreme%2Fuploads%2Fgit-blob-d8287ef0a81e23a121fd5f9dadbc1b5e01ea2d01%2Fprecedence12.svg?alt=media)

```ebnf
rule Precedence12 ::=
    Precedence12  '&&' Precedence11 
  | Precedence11 
  ;

```

## Rule Precedence11

![Precedence11](https://1912480449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FIkmJjA7V0dinN4GNreme%2Fuploads%2Fgit-blob-6c4e294d74a031c1af23c44b70dc37bd587c0fad%2Fprecedence11.svg?alt=media)

```ebnf
rule Precedence11 ::=
    Precedence11  '==' Precedence10 
  | Precedence11  '!=' Precedence10 
  | Precedence10 
  ;

```

## Rule Precedence10

![Precedence10](https://1912480449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FIkmJjA7V0dinN4GNreme%2Fuploads%2Fgit-blob-64f8d5ebc94470d7022134ad1d64dfd732e4ec51%2Fprecedence10.svg?alt=media)

```ebnf
rule Precedence10 ::=
    Precedence10  '<' Precedence9 
  | Precedence10  '>' Precedence9 
  | Precedence10  '<=' Precedence9 
  | Precedence10  '>=' Precedence9 
  | Precedence9 
  ;

```

## Rule Precedence9

![Precedence9](https://1912480449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FIkmJjA7V0dinN4GNreme%2Fuploads%2Fgit-blob-c890cf3bed5dae175e97f7d7ed80738f486b110f%2Fprecedence9.svg?alt=media)

```ebnf
rule Precedence9 ::=
    Precedence9  '|' Precedence8 
  | Precedence8 
  ;

```

## Rule Precedence8

![Precedence8](https://1912480449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FIkmJjA7V0dinN4GNreme%2Fuploads%2Fgit-blob-3146f9db0654de283c1145614d512862bb820734%2Fprecedence8.svg?alt=media)

```ebnf
rule Precedence8 ::=
    Precedence8  '^' Precedence7 
  | Precedence7 
  ;

```

## Rule Precedence7

![Precedence7](https://1912480449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FIkmJjA7V0dinN4GNreme%2Fuploads%2Fgit-blob-f873dfba86d39895e753511edb8331783dd2e972%2Fprecedence7.svg?alt=media)

```ebnf
rule Precedence7 ::=
    Precedence7  '&' Precedence6 
  | Precedence6 
  ;

```

## Rule Precedence6

![Precedence6](https://1912480449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FIkmJjA7V0dinN4GNreme%2Fuploads%2Fgit-blob-3cdca003bd1d2a45780d42cec0378bf34bdef251%2Fprecedence6.svg?alt=media)

```ebnf
rule Precedence6 ::=
    Precedence6  '<<' Precedence5 
  | Precedence6  '>>' Precedence5 
  | Precedence5 
  ;

```

## Rule Precedence5

![Precedence5](https://1912480449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FIkmJjA7V0dinN4GNreme%2Fuploads%2Fgit-blob-89acf94e4f20f4e42ffce65bcf2345d3f12087c3%2Fprecedence5.svg?alt=media)

```ebnf
rule Precedence5 ::=
    Precedence5  '+' Precedence4 
  | Precedence5  '-' Precedence4 
  | Precedence4 
  ;

```

## Rule Precedence4

![Precedence4](https://1912480449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FIkmJjA7V0dinN4GNreme%2Fuploads%2Fgit-blob-0c2537f83c4ae84da718324f97da5697b2b60d62%2Fprecedence4.svg?alt=media)

```ebnf
rule Precedence4 ::=
    Precedence4  '*' Precedence3 
  | Precedence4  '/' Precedence3 
  | Precedence4  '%' Precedence3 
  | Precedence3 
  ;

```

## Rule Precedence3

![Precedence3](https://1912480449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FIkmJjA7V0dinN4GNreme%2Fuploads%2Fgit-blob-af6e03cca3285024f54fa44307268d0674bec31e%2Fprecedence3.svg?alt=media)

```ebnf
rule Precedence3 ::=
    Precedence2  '**' Precedence3 
  | Precedence2 
  ;

```

## Rule Precedence2

![Precedence2](https://1912480449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FIkmJjA7V0dinN4GNreme%2Fuploads%2Fgit-blob-c677df284ad186f700ef83e4b0822d6145c44cdf%2Fprecedence2.svg?alt=media)

```ebnf
rule Precedence2 ::=
     '!' Precedence2 
  |  '~' Precedence2 
  |  'delete' Precedence2 
  |  'new' Precedence2 
  | Precedence0 
  ;

```

## Rule NamedArgument

![NamedArgument](https://1912480449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FIkmJjA7V0dinN4GNreme%2Fuploads%2Fgit-blob-1542db36241402da75ee9097296e02b56f0f8842%2Fnamedargument.svg?alt=media)

```ebnf
rule NamedArgument ::=
    Identifier  ':' Expression 
  |  'address'  ':' Expression 
  ;

```

## Rule FunctionCall

![FunctionCall](https://1912480449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FIkmJjA7V0dinN4GNreme%2Fuploads%2Fgit-blob-8d33af02e882c45933c79dcaf0b68b2a6e39958a%2Ffunctioncall.svg?alt=media)

```ebnf
rule FunctionCall ::=
    Precedence0  '(' Comma!(Expression)  ')' 
  | Precedence0 BlockStatement 
  | Precedence0  '('  '{' Comma!(NamedArgument)  '}'  ')' 
  ;

```

## Rule Precedence0

![Precedence0](https://1912480449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FIkmJjA7V0dinN4GNreme%2Fuploads%2Fgit-blob-bfbab71c805092a7b2abe80289713152d556ea0c%2Fprecedence0.svg?alt=media)

```ebnf
rule Precedence0 ::=
    Precedence0  '++' 
  | Precedence0  '--' 
  | FunctionCall 
  | Precedence0  '[' Expression ?   ']' 
  | Precedence0  '[' Expression ?   ':' Expression ?   ']' 
  | Precedence0  '.' Identifier 
  | Type 
  |  '[' CommaOne!(Expression)  ']' 
  | Identifier 
  | ParameterList 
  | LiteralExpression 
  ;

```

## Rule LiteralExpression

![LiteralExpression](https://1912480449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FIkmJjA7V0dinN4GNreme%2Fuploads%2Fgit-blob-39fdedaa52c7e834812ea10aefef1d9b1950772d%2Fliteralexpression.svg?alt=media)

```ebnf
rule LiteralExpression ::=
     'true' 
  |  'false' 
  | Number 
  | HexNumber 
  | StringLiteral +  
  | AddressLiteral 
  | HashLiteral 
  ;

```

## Rule Parameter

![Parameter](https://1912480449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FIkmJjA7V0dinN4GNreme%2Fuploads%2Fgit-blob-9e3c114d99533e2e296025f5cb12b953dce33b3f%2Fparameter.svg?alt=media)

```ebnf
rule Parameter ::=
    Expression Identifier ?  
  ;

```

## Rule OptParameter

![OptParameter](https://1912480449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FIkmJjA7V0dinN4GNreme%2Fuploads%2Fgit-blob-2295a4bf929380d125510674fdf63b4aa92d0be7%2Foptparameter.svg?alt=media)

```ebnf
rule OptParameter ::=
    Parameter ?  
  ;

```

## Rule ParameterList

![ParameterList](https://1912480449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FIkmJjA7V0dinN4GNreme%2Fuploads%2Fgit-blob-c9408a688f083e85579f16d2328a2e4ebd7eddfc%2Fparameterlist.svg?alt=media)

```ebnf
rule ParameterList ::=
     '('  ')' 
  |  '(' Parameter  ')' 
  |  '(' CommaTwo!(OptParameter)  ')' 
  |  '('  ')' 
  ;

```

## Rule BlockStatementOrSemiColon

![BlockStatementOrSemiColon](https://1912480449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FIkmJjA7V0dinN4GNreme%2Fuploads%2Fgit-blob-ba00be48735a47cf27b40d0c8fcd6a47236334ae%2Fblockstatementorsemicolon.svg?alt=media)

```ebnf
rule BlockStatementOrSemiColon ::=
     ';' 
  | BlockStatement 
  ;

```

## Rule FunctionDefinition

![FunctionDefinition](https://1912480449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FIkmJjA7V0dinN4GNreme%2Fuploads%2Fgit-blob-0c41c58da75a3085ba430b99e29efd160710a8ca%2Ffunctiondefinition.svg?alt=media)

```ebnf
rule FunctionDefinition ::=
     'fn' IdentifierOrError ParameterList (  '->' ParameterList ) ?  BlockStatementOrSemiColon 
  ;

```

## Rule BlockStatement

![BlockStatement](https://1912480449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FIkmJjA7V0dinN4GNreme%2Fuploads%2Fgit-blob-6941b6164161d90c77a237f1f653affa2bb8fa78%2Fblockstatement.svg?alt=media)

```ebnf
rule BlockStatement ::=
     '{' Statement *   '}' 
  ;

```

## Rule OpenStatement

![OpenStatement](https://1912480449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FIkmJjA7V0dinN4GNreme%2Fuploads%2Fgit-blob-d7ba5fd45db0e758d8dfd03d19ab5800239f4594%2Fopenstatement.svg?alt=media)

```ebnf
rule OpenStatement ::=
     'if'  '(' Expression  ')' Statement 
  |  'if'  '(' Expression  ')' ClosedStatement  'else' OpenStatement 
  |  'for'  '(' SimpleStatement ?   ';' Expression ?   ';' Expression ?   ')' OpenStatement 
  |  'while'  '(' Expression  ')' OpenStatement 
  ;

```

## Rule ClosedStatement

![ClosedStatement](https://1912480449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FIkmJjA7V0dinN4GNreme%2Fuploads%2Fgit-blob-a8b9b38130532d1653912499a6ac50d92a25be55%2Fclosedstatement.svg?alt=media)

```ebnf
rule ClosedStatement ::=
    NonIfStatement 
  |  'if'  '(' Expression  ')' ClosedStatement  'else' ClosedStatement 
  |  'while'  '(' Expression  ')' ClosedStatement 
  |  'for'  '(' SimpleStatement ?   ';' Expression ?   ';' Expression ?   ')' ClosedStatement 
  |  'for'  '(' SimpleStatement ?   ';' Expression ?   ';' Expression ?   ')'  ';' 
  ;

```

## Rule Statement

![Statement](https://1912480449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FIkmJjA7V0dinN4GNreme%2Fuploads%2Fgit-blob-6a351f25007b1b3a702d1455674d4ec6683e06fc%2Fstatement.svg?alt=media)

```ebnf
rule Statement ::=
    OpenStatement 
  | ClosedStatement 
  | 
  ;

```

## Rule SimpleStatement

![SimpleStatement](https://1912480449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FIkmJjA7V0dinN4GNreme%2Fuploads%2Fgit-blob-635bd8a90e56ba6072f6694d3b9cf835d773b90c%2Fsimplestatement.svg?alt=media)

```ebnf
rule SimpleStatement ::=
    VariableDeclaration (  '=' Expression ) ?  
  | Expression 
  ;

```

## Rule NonIfStatement

![NonIfStatement](https://1912480449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FIkmJjA7V0dinN4GNreme%2Fuploads%2Fgit-blob-c40ad6e639f5da0885b5780791aa79aa898b39a6%2Fnonifstatement.svg?alt=media)

```ebnf
rule NonIfStatement ::=
    BlockStatement 
  | SimpleStatement  ';' 
  |  'do' Statement  'while'  '(' Expression  ')'  ';' 
  |  'continue'  ';' 
  |  'break'  ';' 
  |  'return'  ';' 
  |  'return' Expression  ';' 
  ;

```

## Rule Comma

![Comma](https://1912480449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FIkmJjA7V0dinN4GNreme%2Fuploads%2Fgit-blob-44ed97cc05fb7e7b685f542fe6775ee00d10ead1%2Fcomma.svg?alt=media)

```ebnf
macro Comma<T> ::=
    
  | CommaOne!(T) 
  ;

```

## Rule CommaOne

![CommaOne](https://1912480449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FIkmJjA7V0dinN4GNreme%2Fuploads%2Fgit-blob-a990ea0e79b9a174dbc1e688898c6ce2c34eb1ce%2Fcommaone.svg?alt=media)

```ebnf
macro CommaOne<T> ::=
    T (  ',' T ) *  
  ;

```

## Rule CommaTwo

![CommaTwo](https://1912480449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FIkmJjA7V0dinN4GNreme%2Fuploads%2Fgit-blob-f17ae2ac502d42f0d872753ad7b2c96fb60113dd%2Fcommatwo.svg?alt=media)

```ebnf
macro CommaTwo<T> ::=
    T (  ',' T ) +  
  ;

```

## Rule Identifier

![Identifier](https://1912480449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FIkmJjA7V0dinN4GNreme%2Fuploads%2Fgit-blob-908c2d157aa9944321a95c565ab992684d325946%2Fidentifier.svg?alt=media)

```ebnf
rule Identifier ::=
     'r#[$_]*[a-zA-Z][a-zA-Z$_0-9]*#' 
  ;

```

## Rule Number

![Number](https://1912480449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FIkmJjA7V0dinN4GNreme%2Fuploads%2Fgit-blob-bdcccde45cf8cfaf67ac1da405e1d4546c797abc%2Fnumber.svg?alt=media)

```ebnf
rule Number ::=
     'r#([1-9][0-9]*|0)#' 
  ;

```

## Rule HexNumber

![HexNumber](https://1912480449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FIkmJjA7V0dinN4GNreme%2Fuploads%2Fgit-blob-5ab5d6e49a238702e434cb022b927c77f33aaafc%2Fhexnumber.svg?alt=media)

```ebnf
rule HexNumber ::=
     'r#0x[0-9A-Fa-f]+#' 
  ;

```

## Rule AddressLiteral

![AddressLiteral](https://1912480449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FIkmJjA7V0dinN4GNreme%2Fuploads%2Fgit-blob-77d3c125d1b087e9d1c8967c8f64ff1af7af1088%2Faddressliteral.svg?alt=media)

```ebnf
rule AddressLiteral ::=
     'r#0x([0-9A-Fa-f]{64})address#' 
  ;

```

## Rule HashLiteral

![HashLiteral](https://1912480449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FIkmJjA7V0dinN4GNreme%2Fuploads%2Fgit-blob-8b8f7a04e5f904ef76abbe730761938ba2f46e48%2Fhashliteral.svg?alt=media)

```ebnf
rule HashLiteral ::=
     'r#0x[0-9A-Fa-f]{64}hash#' 
  ;

```

## Rule StringLiteral

![StringLiteral](https://1912480449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FIkmJjA7V0dinN4GNreme%2Fuploads%2Fgit-blob-ef7f86152d77abda9f1e6bc0c5e83c35ed95a856%2Fstringliteral.svg?alt=media)

```ebnf
rule StringLiteral ::=
     'r#\\[^\\]*\\#' 
  ;

```
