shulkerscript 0.1.0

Shulkerscript language implementation with compiler
Documentation
# Grammar of the Shulkerscript language


## Table of contents


### Program

```ebnf
Program: Namespace Declaration*;
```

### Namespace

```ebnf
Namespace: 'namespace' StringLiteral;
```

### Declaration

```ebnf
Declaration: FunctionDeclaration | Import | TagDeclaration;
```

### Import

```ebnf
Import: 'from' StringLiteral 'import' Identifier;
```

### TagDeclaration

```ebnf
TagDeclaration: 'tag' StringLiteral ('of' StringLiteral)? 'replace'? '[' (StringLiteral (',' StringLiteral)*)? ']';
```

### FunctionDeclaration

```ebnf
Function:
    Annotation* 'pub'? 'fn' Identifier '(' ParameterList? ')' Block
    ;
ParameterList:
    Identifier (',' Identifier)* ','?  
    ;
```

### Annotation

```ebnf
Annotation: '#[' Identifier ('=' StringLiteral)? ']';
```

### Statement

```ebnf
Statement:
    Block
    | LiteralCommand
    | Conditional
    | Grouping
    | DocComment
    | Semicolon
    | Run
    ;
```

### Block

```ebnf	
Block: '{' Statement* '}';
```

### Run

```ebnf
Run:
    'run' Expression ';'
    ;
```

### Conditional

```ebnf
Conditional:
    'if' ParenthizedCondition Block ('else' Block)?
    ;
```

### Condition

```ebnf
Condition:
    PrimaryCondition
    BinaryCondition
    ;
```

#### PrimaryCondition

```ebnf
PrimaryCondition:
    ConditionalPrefix
    | ParenthesizedCondition
    | StringLiteral
    ;
```

#### ConditionalPrefix

```ebnf
ConditionalPrefix:
    ConditionalPrefixOperator PrimaryCondition
    ;
```

#### ConditionalPrefixOperator

``` ebnf
ConditionalPrefixOperator: '!';
```

#### BinaryCondition

``` ebnf
BinaryCondition:
    Condition ConditionalBinaryOperator Condition
    ;
```

#### ConditionalBinaryOperator

``` ebnf
ConditionalBinaryOperator:
    '&&'
    | '||'
    ;
```

#### ParenthizedCondition

```ebnf
ParenthizedCondition:
    '(' Condition ')'
    ;
```


### Grouping

``` ebnf
Grouping:
    'group' Block
    ;
```

### Expression

```ebnf
Expression:
    Primary
    ;
```

### Primary

```ebnf
Primary:
    FunctionCall
    ;
```

### FunctionCall

```ebnf
FunctionCall:
    Identifier '(' (Expression (',' Expression)*)? ')'
    ;
```

### LuaCode

```ebnf
LuaCode:
    'lua' '(' (Expression (',' Expression)*)? ')' '{' (.*?)* '}'
    ;
```