-
Notifications
You must be signed in to change notification settings - Fork 0
0.2.0 Grammar
Robert Durst edited this page Apr 2, 2019
·
47 revisions
| PRODUCTION | SEMANTIC RULES |
|---|---|
| Program → Source | Program.node = Source.node |
| Source → Import Source | SourcePart | Source.syn = new Node("SOURCE", Import.syn, SourcePart.syn) |
| Import → ['Import' ImportInfo ]+ | Import.syn = List(ImportInfo.syn) |
| ImportInfo → UDTName ':' UDTName | ImportInfo.syn = new Node("IMPORT", UDTName.syn, Location.syn) |
| UDTName → Identifier | UDTName.syn = Identifier.syn |
| Location → Identifier | Location.syn = Identifier.syn |
| SourcePart → UDT | SourcePart.syn = UDT.syn |
| SourcePart → Script | SourcePart.syn = Script.syn |
| UDT → UserDefinedType | UDT.syn = UserDefinedType.syn |
| UserDefinedType → Attributes Methods | UserDefinedType.syn = new Node("UDT", Attributes.syn, Methods.syn) |
| Attributes → 'Uat' '{' Variable* '}' | Attributes.syn = List(Variable.syn) |
| Methods → 'Ufn' '{' FunctionDefinition* '}' | Methods.syn = List(FunctionDefinition.syn) |
| Script → Script_ | Script.syn = new Node("SCRIPT", Script_.syn_fund, Script_.syn_start) |
| Script_ → FunctionDefinition* Script_ | Script_.syn_fund = List(FunctionDefinition.syn) |
| Script_ → Start | Script.syn_start = Start.syn |
| FunctionDefinition → '(' 'fun' Identifier FunctionInfo ')' | FunctionDefinition.syn = new Node("FUNCTION_DEFINITION", Identifier.syn, FunctionInfo.syn) |
| FunctionInfo → FunctionInOut Block | FunctionInfo.syn = new Node(FUNCTION_INFO", FunctionInOut.syn, Block.syn) |
| FunctionInOut → FunctionInputs FunctionOutputs* | FunctionInOut.syn = new Node("FUNCTION_IN_OUT", FunctionInputs.syn, FunctionOut.syn) |
| FunctionInputs → '(' Variable [',' Variable]* ')' | FunctionInputs.syn = List(Variable.syn) |
| FunctionOutput → '(' Type ')' | FunctionOut.syn = Type.syn |
| Start → 'start' Block | Start.syn = Block.syn |
| Block → '{' Statement* '}' | Block.syn = List(Statement.syn) |
| Statement → Tree | Return | E0 | |
| Tree → '(' Branch* ')' | |
| Branch → '(' Grouping Block ')' | |
| Grouping → '|' T E0 '|' | |
| Return → 'return' T | |
| E0 → TE1 |
|
| E1 → ['**'] T E0 | E2 | |
| E2 → ['*'|'/'|'%'] T E0 | E3 | |
| E3 → ['+'|'-'] T E0 | E4 | |
| E4 → ['<'|'>'|'<='|'>='] T E0 | E5 | |
| E5 → ['=='|'!='] T E0 | E6 | |
| E6 → ['and'|'or'] T E0 | E7 | |
| E7 → ['='] T E0 | E8 | |
| E8 → ['!']* T* E0 | E9 | |
| E9 → Identifier MemberAccess E0 | E10 | |
| E10 → new NewExpression | ε |
|
| T → Primary | '(' E0 ')' | |
| Primary → Boolean | Number | String | Identifier | |
| Boolean → true | false | |
| Number → Integer | Float | |
| Integer → [0-9]+ | |
| Float → [0-9]+'.'[0-9]+ | |
| String → '"' [^\"]* '"' | |
| Identifier → [a-ZA-Z][a-ZA-Z0-9_]* |