# 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#\\[^\\]*\\#' 
  ;

```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://ola-foundation.gitbook.io/ola-lang/full.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
