├── grammar ├── .gitkeep ├── ComposeParser.g4 └── ComposeLexer.g4 ├── producer ├── js │ ├── .gitignore │ ├── README.md │ ├── src │ │ ├── index.ts │ │ ├── book.ts │ │ ├── ts │ │ │ ├── ComposeParser.tokens │ │ │ ├── ComposeParser.interp │ │ │ ├── ComposeParserVisitor.ts │ │ │ ├── ComposeParserListener.ts │ │ │ ├── ComposeLexer.interp │ │ │ └── ComposeParser.ts │ │ ├── dispatcher.ts │ │ └── ast.ts │ ├── build.js │ ├── package.json │ ├── grammar │ │ ├── ComposeLexer.tokens │ │ ├── ComposeParser.tokens │ │ ├── ComposeParser.interp │ │ ├── ComposeParserVisitor.ts │ │ ├── ComposeParserListener.ts │ │ ├── ComposeLexer.interp │ │ ├── ComposeParser.ts │ │ └── ComposeLexer.ts │ └── yarn.lock └── go │ ├── dispatcher_test.go │ ├── book.go │ ├── dispatcher.go │ ├── ast_test.go │ └── ast.go ├── compile-antlr.sh ├── consumer ├── consumer_test.go └── consumer.go ├── main.go ├── .gitignore ├── go.mod ├── libs └── go │ ├── ComposeLexer.tokens │ ├── ComposeParser.tokens │ ├── ComposeParser.interp │ ├── composeparser_listener.go │ ├── composeparser_base_listener.go │ ├── ComposeLexer.interp │ └── compose_lexer.go ├── LICENSE ├── go.sum ├── README.md └── docs └── architecture.svg /grammar/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /producer/js/.gitignore: -------------------------------------------------------------------------------- 1 | lib 2 | -------------------------------------------------------------------------------- /producer/js/README.md: -------------------------------------------------------------------------------- 1 | # Javascript 2 | 3 | follow: https://github.com/tunnelvisionlabs/antlr4ts 4 | -------------------------------------------------------------------------------- /producer/js/src/index.ts: -------------------------------------------------------------------------------- 1 | import {Dispatcher} from "./dispatcher"; 2 | 3 | let result = Dispatcher("Book.Target(123).Source(12)"); 4 | console.log(result) 5 | -------------------------------------------------------------------------------- /compile-antlr.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | cd grammar 4 | 5 | antlr -Dlanguage=Go -listener ComposeLexer.g4 -o ../libs/go 6 | antlr -Dlanguage=Go -listener ComposeParser.g4 -o ../libs/go 7 | -------------------------------------------------------------------------------- /producer/go/dispatcher_test.go: -------------------------------------------------------------------------------- 1 | package producer 2 | 3 | import ( 4 | "github.com/stretchr/testify/assert" 5 | "testing" 6 | ) 7 | 8 | func Test_dispatcher(t *testing.T) { 9 | res := Dispatcher("Book.source(12).target(12)") 10 | assert.Equal(t, res, "{\"Id\":\"12\",\"Title\":\"title\",\"Name\":\"hello\"}") 11 | } 12 | -------------------------------------------------------------------------------- /producer/js/build.js: -------------------------------------------------------------------------------- 1 | const { build } = require('esbuild') 2 | const glob = require('glob') 3 | const entryPoints = glob.sync('./src/**/*.ts') 4 | 5 | build({ 6 | entryPoints, 7 | outbase: './src', 8 | outdir: './lib' , 9 | platform: 'node', 10 | format: 'cjs', 11 | external: [], 12 | watch: true, 13 | }) 14 | 15 | -------------------------------------------------------------------------------- /consumer/consumer_test.go: -------------------------------------------------------------------------------- 1 | package consumer 2 | 3 | import ( 4 | "testing" 5 | ) 6 | 7 | func TestNewCompose(t *testing.T) { 8 | compose := NewCompose() 9 | compose.Source("12").Target("12.0") 10 | got := compose.Build() 11 | want := "Book.source(12).target(12.0)" 12 | 13 | if got != want { 14 | t.Errorf("got %q, wanted %q", got, want) 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "dsl-compose/consumer" 5 | producer "dsl-compose/producer/go" 6 | "fmt" 7 | ) 8 | 9 | func main() { 10 | compose := consumer.NewCompose() 11 | compose.Source("12").Target("12.0") 12 | contract := compose.Build() 13 | 14 | fmt.Println(contract) 15 | 16 | flow := producer.Dispatcher(contract) 17 | fmt.Println(flow) 18 | } 19 | -------------------------------------------------------------------------------- /producer/go/book.go: -------------------------------------------------------------------------------- 1 | package producer 2 | 3 | type Book struct { 4 | Id string 5 | Title string 6 | Name string 7 | } 8 | 9 | func NewBook() *Book { 10 | return &Book{} 11 | } 12 | 13 | func (b *Book) Source(id string) *Book { 14 | b.Id = id 15 | b.Title = "title" 16 | b.Name = "hello" 17 | 18 | return b 19 | } 20 | 21 | func (b *Book) Target() string { 22 | return b.Title 23 | } 24 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Binaries for programs and plugins 2 | *.exe 3 | *.exe~ 4 | *.dll 5 | *.so 6 | *.dylib 7 | 8 | # Test binary, built with `go test -c` 9 | *.test 10 | 11 | # Output of the go coverage tool, specifically when used with LiteIDE 12 | *.out 13 | 14 | # Dependency directories (remove the comment below to include it) 15 | # vendor/ 16 | .idea 17 | gen 18 | grammar/ComposeLexer.tokens 19 | **/node_modules/ 20 | -------------------------------------------------------------------------------- /go.mod: -------------------------------------------------------------------------------- 1 | module dsl-compose 2 | 3 | go 1.18 4 | 5 | require ( 6 | github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20220111164937-1b144fa7b40f // indirect 7 | github.com/davecgh/go-spew v1.1.0 // indirect 8 | github.com/pmezard/go-difflib v1.0.0 // indirect 9 | github.com/stretchr/objx v0.1.0 // indirect 10 | github.com/stretchr/testify v1.7.0 // indirect 11 | gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c // indirect 12 | ) 13 | -------------------------------------------------------------------------------- /producer/js/src/book.ts: -------------------------------------------------------------------------------- 1 | export interface IBook { 2 | id: string, 3 | title: string, 4 | name: string 5 | } 6 | 7 | export class Book implements IBook { 8 | id: string; 9 | name: string; 10 | title: string; 11 | 12 | source(id: string) { 13 | this.id = id; 14 | this.title = "title"; 15 | this.name = "name"; 16 | return this 17 | } 18 | 19 | target() { 20 | return this.title 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /libs/go/ComposeLexer.tokens: -------------------------------------------------------------------------------- 1 | LPAREN=1 2 | RPAREN=2 3 | LBRACE=3 4 | RBRACE=4 5 | LBRACK=5 6 | RBRACK=6 7 | SEMI=7 8 | COMMA=8 9 | DOT=9 10 | Book=10 11 | Note=11 12 | Paser=12 13 | Identifier=13 14 | IntegerLiteral=14 15 | FloatingPointLiteral=15 16 | BooleanLiteral=16 17 | CharacterLiteral=17 18 | StringLiteral=18 19 | NullLiteral=19 20 | WS=20 21 | COMMENT=21 22 | LINE_COMMENT=22 23 | '('=1 24 | ')'=2 25 | '{'=3 26 | '}'=4 27 | '['=5 28 | ']'=6 29 | ';'=7 30 | ','=8 31 | '.'=9 32 | 'Book'=10 33 | 'Note'=11 34 | 'Paper'=12 35 | 'null'=19 36 | -------------------------------------------------------------------------------- /libs/go/ComposeParser.tokens: -------------------------------------------------------------------------------- 1 | LPAREN=1 2 | RPAREN=2 3 | LBRACE=3 4 | RBRACE=4 5 | LBRACK=5 6 | RBRACK=6 7 | SEMI=7 8 | COMMA=8 9 | DOT=9 10 | Book=10 11 | Note=11 12 | Paser=12 13 | Identifier=13 14 | IntegerLiteral=14 15 | FloatingPointLiteral=15 16 | BooleanLiteral=16 17 | CharacterLiteral=17 18 | StringLiteral=18 19 | NullLiteral=19 20 | WS=20 21 | COMMENT=21 22 | LINE_COMMENT=22 23 | '('=1 24 | ')'=2 25 | '{'=3 26 | '}'=4 27 | '['=5 28 | ']'=6 29 | ';'=7 30 | ','=8 31 | '.'=9 32 | 'Book'=10 33 | 'Note'=11 34 | 'Paper'=12 35 | 'null'=19 36 | -------------------------------------------------------------------------------- /producer/js/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "compose", 3 | "version": "1.0.0", 4 | "description": "", 5 | "scripts": { 6 | "build": "node build.js", 7 | "grammar": "antlr4ts -visitor ../../grammar/*.g4 -o src/ts" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC", 12 | "dependencies": { 13 | "antlr4": "^4.9.3", 14 | "antlr4ts": "^0.5.0-alpha.4" 15 | }, 16 | "devDependencies": { 17 | "esbuild": "^0.14.11", 18 | "glob": "^7.2.0", 19 | "antlr4ts-cli": "^0.5.0-alpha.4" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /producer/go/dispatcher.go: -------------------------------------------------------------------------------- 1 | package producer 2 | 3 | import ( 4 | "encoding/json" 5 | ) 6 | 7 | func Dispatcher(str string) string { 8 | flow := Compile(str) 9 | switch flow.Entity { 10 | case "Book": 11 | book := NewBook() 12 | for _, call := range flow.Calls { 13 | switch call.FunctionName { 14 | case "target": 15 | book.Target() 16 | case "source": 17 | book.Source(call.Parameters[0].TypeValue) 18 | } 19 | } 20 | 21 | out, _ := json.Marshal(book) 22 | return string(out) 23 | default: 24 | return "" 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /producer/js/grammar/ComposeLexer.tokens: -------------------------------------------------------------------------------- 1 | LPAREN=1 2 | RPAREN=2 3 | LBRACE=3 4 | RBRACE=4 5 | LBRACK=5 6 | RBRACK=6 7 | SEMI=7 8 | COMMA=8 9 | DOT=9 10 | Book=10 11 | Note=11 12 | Paser=12 13 | Identifier=13 14 | IntegerLiteral=14 15 | FloatingPointLiteral=15 16 | BooleanLiteral=16 17 | CharacterLiteral=17 18 | StringLiteral=18 19 | NullLiteral=19 20 | WS=20 21 | COMMENT=21 22 | LINE_COMMENT=22 23 | '('=1 24 | ')'=2 25 | '{'=3 26 | '}'=4 27 | '['=5 28 | ']'=6 29 | ';'=7 30 | ','=8 31 | '.'=9 32 | 'Book'=10 33 | 'Note'=11 34 | 'Paper'=12 35 | 'null'=19 36 | -------------------------------------------------------------------------------- /producer/js/grammar/ComposeParser.tokens: -------------------------------------------------------------------------------- 1 | LPAREN=1 2 | RPAREN=2 3 | LBRACE=3 4 | RBRACE=4 5 | LBRACK=5 6 | RBRACK=6 7 | SEMI=7 8 | COMMA=8 9 | DOT=9 10 | Book=10 11 | Note=11 12 | Paser=12 13 | Identifier=13 14 | IntegerLiteral=14 15 | FloatingPointLiteral=15 16 | BooleanLiteral=16 17 | CharacterLiteral=17 18 | StringLiteral=18 19 | NullLiteral=19 20 | WS=20 21 | COMMENT=21 22 | LINE_COMMENT=22 23 | '('=1 24 | ')'=2 25 | '{'=3 26 | '}'=4 27 | '['=5 28 | ']'=6 29 | ';'=7 30 | ','=8 31 | '.'=9 32 | 'Book'=10 33 | 'Note'=11 34 | 'Paper'=12 35 | 'null'=19 36 | -------------------------------------------------------------------------------- /producer/js/src/ts/ComposeParser.tokens: -------------------------------------------------------------------------------- 1 | LPAREN=1 2 | RPAREN=2 3 | LBRACE=3 4 | RBRACE=4 5 | LBRACK=5 6 | RBRACK=6 7 | SEMI=7 8 | COMMA=8 9 | DOT=9 10 | Book=10 11 | Note=11 12 | Paser=12 13 | Identifier=13 14 | IntegerLiteral=14 15 | FloatingPointLiteral=15 16 | BooleanLiteral=16 17 | CharacterLiteral=17 18 | StringLiteral=18 19 | NullLiteral=19 20 | WS=20 21 | COMMENT=21 22 | LINE_COMMENT=22 23 | '('=1 24 | ')'=2 25 | '{'=3 26 | '}'=4 27 | '['=5 28 | ']'=6 29 | ';'=7 30 | ','=8 31 | '.'=9 32 | 'Book'=10 33 | 'Note'=11 34 | 'Paper'=12 35 | 'null'=19 36 | -------------------------------------------------------------------------------- /consumer/consumer.go: -------------------------------------------------------------------------------- 1 | package consumer 2 | 3 | import "strings" 4 | 5 | type Compose struct { 6 | builder strings.Builder 7 | } 8 | 9 | func NewCompose() *Compose { 10 | return &Compose{ 11 | builder: strings.Builder{}, 12 | } 13 | } 14 | 15 | func (b *Compose) Source(id string) *Compose { 16 | source := "source(" + id + ")" 17 | b.builder.WriteString(source) 18 | return b 19 | } 20 | 21 | func (b *Compose) Target(id string) *Compose { 22 | source := ".target(" + id + ")" 23 | b.builder.WriteString(source) 24 | return b 25 | } 26 | 27 | func (b *Compose) Build() string { 28 | return "Book." + b.builder.String() 29 | } 30 | -------------------------------------------------------------------------------- /producer/js/src/dispatcher.ts: -------------------------------------------------------------------------------- 1 | import {Compile} from "./ast"; 2 | import {Book} from "./book"; 3 | 4 | export function Dispatcher(str: string) { 5 | let flow = Compile(str) 6 | switch (flow.Entity) { 7 | case "Book": 8 | let book = new Book(); 9 | for (let call of flow.Calls) { 10 | switch (call.FunctionName) { 11 | case "Target": 12 | book.target() 13 | break; 14 | case "Source": 15 | book.source(call.Parameters[0].TypeValue) 16 | break; 17 | } 18 | } 19 | 20 | return JSON.stringify(book) 21 | default: 22 | return "" 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /grammar/ComposeParser.g4: -------------------------------------------------------------------------------- 1 | // refs by: https://github.com/antlr/grammars-v4/blob/master/java/java9/Java9Parser.g4 2 | parser grammar ComposeParser; 3 | 4 | options 5 | { 6 | tokenVocab = ComposeLexer; 7 | } 8 | 9 | compilationUnit 10 | : entityDecl? 11 | ; 12 | 13 | entityDecl 14 | : entityModifier ('.' entityCall)* 15 | ; 16 | 17 | entityModifier 18 | : StringLiteral 19 | ; 20 | 21 | entityCall 22 | : identifier '(' parameterList ')' 23 | ; 24 | 25 | // parameter => string, int, float 26 | // or JSON string 27 | parameterList 28 | : literal (',' literal)* 29 | ; 30 | 31 | literal 32 | : IntegerLiteral 33 | | FloatingPointLiteral 34 | | BooleanLiteral 35 | | CharacterLiteral 36 | | StringLiteral 37 | | NullLiteral 38 | ; 39 | 40 | identifier : Identifier; 41 | -------------------------------------------------------------------------------- /producer/go/ast_test.go: -------------------------------------------------------------------------------- 1 | package producer 2 | 3 | import ( 4 | "github.com/stretchr/testify/assert" 5 | "testing" 6 | ) 7 | 8 | func Test_int(t *testing.T) { 9 | flow := Compile("Book.Target(12)") 10 | 11 | assert.Equal(t, flow.Calls[0].Parameters[0].TypeName, "int") 12 | assert.Equal(t, flow.Calls[0].Parameters[0].TypeValue, "12") 13 | } 14 | 15 | func Test_float(t *testing.T) { 16 | flow := Compile("Book.Target(12.0)") 17 | 18 | assert.Equal(t, flow.Calls[0].Parameters[0].TypeName, "float") 19 | assert.Equal(t, flow.Calls[0].Parameters[0].TypeValue, "12.0") 20 | } 21 | 22 | func Test_string(t *testing.T) { 23 | flow := Compile("Book.Target(12, \"demo\")") 24 | 25 | assert.Equal(t, flow.Calls[0].Parameters[0].TypeName, "int") 26 | assert.Equal(t, flow.Calls[0].Parameters[0].TypeValue, "12") 27 | 28 | assert.Equal(t, flow.Calls[0].Parameters[1].TypeName, "string") 29 | assert.Equal(t, flow.Calls[0].Parameters[1].TypeValue, "\"demo\"") 30 | } 31 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Fengda Huang 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /go.sum: -------------------------------------------------------------------------------- 1 | github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20220111164937-1b144fa7b40f h1:qjU5jNuurI1ianoG93ZAJt6eN+PqZ3pUr82x+2R3Jqs= 2 | github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20220111164937-1b144fa7b40f/go.mod h1:F7bn7fEU90QkQ3tnmaTx3LTKLEDqnwWODIYppRQ5hnY= 3 | github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= 4 | github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 5 | github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= 6 | github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= 7 | github.com/stretchr/objx v0.1.0 h1:4G4v2dO3VZwixGIRoQ5Lfboy6nUhCyYzaqnIAPPhYs4= 8 | github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= 9 | github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= 10 | github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= 11 | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 12 | gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= 13 | gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= 14 | -------------------------------------------------------------------------------- /libs/go/ComposeParser.interp: -------------------------------------------------------------------------------- 1 | token literal names: 2 | null 3 | '(' 4 | ')' 5 | '{' 6 | '}' 7 | '[' 8 | ']' 9 | ';' 10 | ',' 11 | '.' 12 | 'Book' 13 | 'Note' 14 | 'Paper' 15 | null 16 | null 17 | null 18 | null 19 | null 20 | null 21 | 'null' 22 | null 23 | null 24 | null 25 | 26 | token symbolic names: 27 | null 28 | LPAREN 29 | RPAREN 30 | LBRACE 31 | RBRACE 32 | LBRACK 33 | RBRACK 34 | SEMI 35 | COMMA 36 | DOT 37 | Book 38 | Note 39 | Paser 40 | Identifier 41 | IntegerLiteral 42 | FloatingPointLiteral 43 | BooleanLiteral 44 | CharacterLiteral 45 | StringLiteral 46 | NullLiteral 47 | WS 48 | COMMENT 49 | LINE_COMMENT 50 | 51 | rule names: 52 | compilationUnit 53 | entityDecl 54 | entityModifier 55 | entityCall 56 | parameterList 57 | literal 58 | identifier 59 | 60 | 61 | atn: 62 | [3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 24, 47, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 3, 2, 5, 2, 18, 10, 2, 3, 3, 3, 3, 3, 3, 7, 3, 23, 10, 3, 12, 3, 14, 3, 26, 11, 3, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 7, 6, 38, 10, 6, 12, 6, 14, 6, 41, 11, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 2, 2, 9, 2, 4, 6, 8, 10, 12, 14, 2, 3, 3, 2, 16, 21, 2, 42, 2, 17, 3, 2, 2, 2, 4, 19, 3, 2, 2, 2, 6, 27, 3, 2, 2, 2, 8, 29, 3, 2, 2, 2, 10, 34, 3, 2, 2, 2, 12, 42, 3, 2, 2, 2, 14, 44, 3, 2, 2, 2, 16, 18, 5, 4, 3, 2, 17, 16, 3, 2, 2, 2, 17, 18, 3, 2, 2, 2, 18, 3, 3, 2, 2, 2, 19, 24, 5, 6, 4, 2, 20, 21, 7, 11, 2, 2, 21, 23, 5, 8, 5, 2, 22, 20, 3, 2, 2, 2, 23, 26, 3, 2, 2, 2, 24, 22, 3, 2, 2, 2, 24, 25, 3, 2, 2, 2, 25, 5, 3, 2, 2, 2, 26, 24, 3, 2, 2, 2, 27, 28, 7, 20, 2, 2, 28, 7, 3, 2, 2, 2, 29, 30, 5, 14, 8, 2, 30, 31, 7, 3, 2, 2, 31, 32, 5, 10, 6, 2, 32, 33, 7, 4, 2, 2, 33, 9, 3, 2, 2, 2, 34, 39, 5, 12, 7, 2, 35, 36, 7, 10, 2, 2, 36, 38, 5, 12, 7, 2, 37, 35, 3, 2, 2, 2, 38, 41, 3, 2, 2, 2, 39, 37, 3, 2, 2, 2, 39, 40, 3, 2, 2, 2, 40, 11, 3, 2, 2, 2, 41, 39, 3, 2, 2, 2, 42, 43, 9, 2, 2, 2, 43, 13, 3, 2, 2, 2, 44, 45, 7, 15, 2, 2, 45, 15, 3, 2, 2, 2, 5, 17, 24, 39] -------------------------------------------------------------------------------- /producer/js/grammar/ComposeParser.interp: -------------------------------------------------------------------------------- 1 | token literal names: 2 | null 3 | '(' 4 | ')' 5 | '{' 6 | '}' 7 | '[' 8 | ']' 9 | ';' 10 | ',' 11 | '.' 12 | 'Book' 13 | 'Note' 14 | 'Paper' 15 | null 16 | null 17 | null 18 | null 19 | null 20 | null 21 | 'null' 22 | null 23 | null 24 | null 25 | 26 | token symbolic names: 27 | null 28 | LPAREN 29 | RPAREN 30 | LBRACE 31 | RBRACE 32 | LBRACK 33 | RBRACK 34 | SEMI 35 | COMMA 36 | DOT 37 | Book 38 | Note 39 | Paser 40 | Identifier 41 | IntegerLiteral 42 | FloatingPointLiteral 43 | BooleanLiteral 44 | CharacterLiteral 45 | StringLiteral 46 | NullLiteral 47 | WS 48 | COMMENT 49 | LINE_COMMENT 50 | 51 | rule names: 52 | compilationUnit 53 | entityDecl 54 | entityModifier 55 | entityCall 56 | parameterList 57 | literal 58 | identifier 59 | 60 | 61 | atn: 62 | [3, 51485, 51898, 1421, 44986, 20307, 1543, 60043, 49729, 3, 24, 47, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 3, 2, 5, 2, 18, 10, 2, 3, 3, 3, 3, 3, 3, 7, 3, 23, 10, 3, 12, 3, 14, 3, 26, 11, 3, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 7, 6, 38, 10, 6, 12, 6, 14, 6, 41, 11, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 2, 2, 2, 9, 2, 2, 4, 2, 6, 2, 8, 2, 10, 2, 12, 2, 14, 2, 2, 3, 3, 2, 16, 21, 2, 42, 2, 17, 3, 2, 2, 2, 4, 19, 3, 2, 2, 2, 6, 27, 3, 2, 2, 2, 8, 29, 3, 2, 2, 2, 10, 34, 3, 2, 2, 2, 12, 42, 3, 2, 2, 2, 14, 44, 3, 2, 2, 2, 16, 18, 5, 4, 3, 2, 17, 16, 3, 2, 2, 2, 17, 18, 3, 2, 2, 2, 18, 3, 3, 2, 2, 2, 19, 24, 5, 6, 4, 2, 20, 21, 7, 11, 2, 2, 21, 23, 5, 8, 5, 2, 22, 20, 3, 2, 2, 2, 23, 26, 3, 2, 2, 2, 24, 22, 3, 2, 2, 2, 24, 25, 3, 2, 2, 2, 25, 5, 3, 2, 2, 2, 26, 24, 3, 2, 2, 2, 27, 28, 7, 20, 2, 2, 28, 7, 3, 2, 2, 2, 29, 30, 5, 14, 8, 2, 30, 31, 7, 3, 2, 2, 31, 32, 5, 10, 6, 2, 32, 33, 7, 4, 2, 2, 33, 9, 3, 2, 2, 2, 34, 39, 5, 12, 7, 2, 35, 36, 7, 10, 2, 2, 36, 38, 5, 12, 7, 2, 37, 35, 3, 2, 2, 2, 38, 41, 3, 2, 2, 2, 39, 37, 3, 2, 2, 2, 39, 40, 3, 2, 2, 2, 40, 11, 3, 2, 2, 2, 41, 39, 3, 2, 2, 2, 42, 43, 9, 2, 2, 2, 43, 13, 3, 2, 2, 2, 44, 45, 7, 15, 2, 2, 45, 15, 3, 2, 2, 2, 5, 17, 24, 39] -------------------------------------------------------------------------------- /producer/js/src/ts/ComposeParser.interp: -------------------------------------------------------------------------------- 1 | token literal names: 2 | null 3 | '(' 4 | ')' 5 | '{' 6 | '}' 7 | '[' 8 | ']' 9 | ';' 10 | ',' 11 | '.' 12 | 'Book' 13 | 'Note' 14 | 'Paper' 15 | null 16 | null 17 | null 18 | null 19 | null 20 | null 21 | 'null' 22 | null 23 | null 24 | null 25 | 26 | token symbolic names: 27 | null 28 | LPAREN 29 | RPAREN 30 | LBRACE 31 | RBRACE 32 | LBRACK 33 | RBRACK 34 | SEMI 35 | COMMA 36 | DOT 37 | Book 38 | Note 39 | Paser 40 | Identifier 41 | IntegerLiteral 42 | FloatingPointLiteral 43 | BooleanLiteral 44 | CharacterLiteral 45 | StringLiteral 46 | NullLiteral 47 | WS 48 | COMMENT 49 | LINE_COMMENT 50 | 51 | rule names: 52 | compilationUnit 53 | entityDecl 54 | entityModifier 55 | entityCall 56 | parameterList 57 | literal 58 | identifier 59 | 60 | 61 | atn: 62 | [3, 51485, 51898, 1421, 44986, 20307, 1543, 60043, 49729, 3, 24, 47, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 3, 2, 5, 2, 18, 10, 2, 3, 3, 3, 3, 3, 3, 7, 3, 23, 10, 3, 12, 3, 14, 3, 26, 11, 3, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 7, 6, 38, 10, 6, 12, 6, 14, 6, 41, 11, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 2, 2, 2, 9, 2, 2, 4, 2, 6, 2, 8, 2, 10, 2, 12, 2, 14, 2, 2, 4, 3, 2, 12, 14, 3, 2, 16, 21, 2, 42, 2, 17, 3, 2, 2, 2, 4, 19, 3, 2, 2, 2, 6, 27, 3, 2, 2, 2, 8, 29, 3, 2, 2, 2, 10, 34, 3, 2, 2, 2, 12, 42, 3, 2, 2, 2, 14, 44, 3, 2, 2, 2, 16, 18, 5, 4, 3, 2, 17, 16, 3, 2, 2, 2, 17, 18, 3, 2, 2, 2, 18, 3, 3, 2, 2, 2, 19, 24, 5, 6, 4, 2, 20, 21, 7, 11, 2, 2, 21, 23, 5, 8, 5, 2, 22, 20, 3, 2, 2, 2, 23, 26, 3, 2, 2, 2, 24, 22, 3, 2, 2, 2, 24, 25, 3, 2, 2, 2, 25, 5, 3, 2, 2, 2, 26, 24, 3, 2, 2, 2, 27, 28, 9, 2, 2, 2, 28, 7, 3, 2, 2, 2, 29, 30, 5, 14, 8, 2, 30, 31, 7, 3, 2, 2, 31, 32, 5, 10, 6, 2, 32, 33, 7, 4, 2, 2, 33, 9, 3, 2, 2, 2, 34, 39, 5, 12, 7, 2, 35, 36, 7, 10, 2, 2, 36, 38, 5, 12, 7, 2, 37, 35, 3, 2, 2, 2, 38, 41, 3, 2, 2, 2, 39, 37, 3, 2, 2, 2, 39, 40, 3, 2, 2, 2, 40, 11, 3, 2, 2, 2, 41, 39, 3, 2, 2, 2, 42, 43, 9, 3, 2, 2, 43, 13, 3, 2, 2, 2, 44, 45, 7, 15, 2, 2, 45, 15, 3, 2, 2, 2, 5, 17, 24, 39] -------------------------------------------------------------------------------- /libs/go/composeparser_listener.go: -------------------------------------------------------------------------------- 1 | // Code generated from ComposeParser.g4 by ANTLR 4.9.3. DO NOT EDIT. 2 | 3 | package parser // ComposeParser 4 | 5 | import "github.com/antlr/antlr4/runtime/Go/antlr" 6 | 7 | // ComposeParserListener is a complete listener for a parse tree produced by ComposeParser. 8 | type ComposeParserListener interface { 9 | antlr.ParseTreeListener 10 | 11 | // EnterCompilationUnit is called when entering the compilationUnit production. 12 | EnterCompilationUnit(c *CompilationUnitContext) 13 | 14 | // EnterEntityDecl is called when entering the entityDecl production. 15 | EnterEntityDecl(c *EntityDeclContext) 16 | 17 | // EnterEntityModifier is called when entering the entityModifier production. 18 | EnterEntityModifier(c *EntityModifierContext) 19 | 20 | // EnterEntityCall is called when entering the entityCall production. 21 | EnterEntityCall(c *EntityCallContext) 22 | 23 | // EnterParameterList is called when entering the parameterList production. 24 | EnterParameterList(c *ParameterListContext) 25 | 26 | // EnterLiteral is called when entering the literal production. 27 | EnterLiteral(c *LiteralContext) 28 | 29 | // EnterIdentifier is called when entering the identifier production. 30 | EnterIdentifier(c *IdentifierContext) 31 | 32 | // ExitCompilationUnit is called when exiting the compilationUnit production. 33 | ExitCompilationUnit(c *CompilationUnitContext) 34 | 35 | // ExitEntityDecl is called when exiting the entityDecl production. 36 | ExitEntityDecl(c *EntityDeclContext) 37 | 38 | // ExitEntityModifier is called when exiting the entityModifier production. 39 | ExitEntityModifier(c *EntityModifierContext) 40 | 41 | // ExitEntityCall is called when exiting the entityCall production. 42 | ExitEntityCall(c *EntityCallContext) 43 | 44 | // ExitParameterList is called when exiting the parameterList production. 45 | ExitParameterList(c *ParameterListContext) 46 | 47 | // ExitLiteral is called when exiting the literal production. 48 | ExitLiteral(c *LiteralContext) 49 | 50 | // ExitIdentifier is called when exiting the identifier production. 51 | ExitIdentifier(c *IdentifierContext) 52 | } 53 | -------------------------------------------------------------------------------- /producer/js/grammar/ComposeParserVisitor.ts: -------------------------------------------------------------------------------- 1 | // Generated from ../../grammar/ComposeParser.g4 by ANTLR 4.9.0-SNAPSHOT 2 | 3 | 4 | import { ParseTreeVisitor } from "antlr4ts/tree/ParseTreeVisitor"; 5 | 6 | import { CompilationUnitContext } from "./ComposeParser"; 7 | import { EntityDeclContext } from "./ComposeParser"; 8 | import { EntityModifierContext } from "./ComposeParser"; 9 | import { EntityCallContext } from "./ComposeParser"; 10 | import { ParameterListContext } from "./ComposeParser"; 11 | import { LiteralContext } from "./ComposeParser"; 12 | import { IdentifierContext } from "./ComposeParser"; 13 | 14 | 15 | /** 16 | * This interface defines a complete generic visitor for a parse tree produced 17 | * by `ComposeParser`. 18 | * 19 | * @param The return type of the visit operation. Use `void` for 20 | * operations with no return type. 21 | */ 22 | export interface ComposeParserVisitor extends ParseTreeVisitor { 23 | /** 24 | * Visit a parse tree produced by `ComposeParser.compilationUnit`. 25 | * @param ctx the parse tree 26 | * @return the visitor result 27 | */ 28 | visitCompilationUnit?: (ctx: CompilationUnitContext) => Result; 29 | 30 | /** 31 | * Visit a parse tree produced by `ComposeParser.entityDecl`. 32 | * @param ctx the parse tree 33 | * @return the visitor result 34 | */ 35 | visitEntityDecl?: (ctx: EntityDeclContext) => Result; 36 | 37 | /** 38 | * Visit a parse tree produced by `ComposeParser.entityModifier`. 39 | * @param ctx the parse tree 40 | * @return the visitor result 41 | */ 42 | visitEntityModifier?: (ctx: EntityModifierContext) => Result; 43 | 44 | /** 45 | * Visit a parse tree produced by `ComposeParser.entityCall`. 46 | * @param ctx the parse tree 47 | * @return the visitor result 48 | */ 49 | visitEntityCall?: (ctx: EntityCallContext) => Result; 50 | 51 | /** 52 | * Visit a parse tree produced by `ComposeParser.parameterList`. 53 | * @param ctx the parse tree 54 | * @return the visitor result 55 | */ 56 | visitParameterList?: (ctx: ParameterListContext) => Result; 57 | 58 | /** 59 | * Visit a parse tree produced by `ComposeParser.literal`. 60 | * @param ctx the parse tree 61 | * @return the visitor result 62 | */ 63 | visitLiteral?: (ctx: LiteralContext) => Result; 64 | 65 | /** 66 | * Visit a parse tree produced by `ComposeParser.identifier`. 67 | * @param ctx the parse tree 68 | * @return the visitor result 69 | */ 70 | visitIdentifier?: (ctx: IdentifierContext) => Result; 71 | } 72 | 73 | -------------------------------------------------------------------------------- /producer/js/src/ts/ComposeParserVisitor.ts: -------------------------------------------------------------------------------- 1 | // Generated from ../../grammar/ComposeParser.g4 by ANTLR 4.9.0-SNAPSHOT 2 | 3 | 4 | import { ParseTreeVisitor } from "antlr4ts/tree/ParseTreeVisitor"; 5 | 6 | import { CompilationUnitContext } from "./ComposeParser"; 7 | import { EntityDeclContext } from "./ComposeParser"; 8 | import { EntityModifierContext } from "./ComposeParser"; 9 | import { EntityCallContext } from "./ComposeParser"; 10 | import { ParameterListContext } from "./ComposeParser"; 11 | import { LiteralContext } from "./ComposeParser"; 12 | import { IdentifierContext } from "./ComposeParser"; 13 | 14 | 15 | /** 16 | * This interface defines a complete generic visitor for a parse tree produced 17 | * by `ComposeParser`. 18 | * 19 | * @param The return type of the visit operation. Use `void` for 20 | * operations with no return type. 21 | */ 22 | export interface ComposeParserVisitor extends ParseTreeVisitor { 23 | /** 24 | * Visit a parse tree produced by `ComposeParser.compilationUnit`. 25 | * @param ctx the parse tree 26 | * @return the visitor result 27 | */ 28 | visitCompilationUnit?: (ctx: CompilationUnitContext) => Result; 29 | 30 | /** 31 | * Visit a parse tree produced by `ComposeParser.entityDecl`. 32 | * @param ctx the parse tree 33 | * @return the visitor result 34 | */ 35 | visitEntityDecl?: (ctx: EntityDeclContext) => Result; 36 | 37 | /** 38 | * Visit a parse tree produced by `ComposeParser.entityModifier`. 39 | * @param ctx the parse tree 40 | * @return the visitor result 41 | */ 42 | visitEntityModifier?: (ctx: EntityModifierContext) => Result; 43 | 44 | /** 45 | * Visit a parse tree produced by `ComposeParser.entityCall`. 46 | * @param ctx the parse tree 47 | * @return the visitor result 48 | */ 49 | visitEntityCall?: (ctx: EntityCallContext) => Result; 50 | 51 | /** 52 | * Visit a parse tree produced by `ComposeParser.parameterList`. 53 | * @param ctx the parse tree 54 | * @return the visitor result 55 | */ 56 | visitParameterList?: (ctx: ParameterListContext) => Result; 57 | 58 | /** 59 | * Visit a parse tree produced by `ComposeParser.literal`. 60 | * @param ctx the parse tree 61 | * @return the visitor result 62 | */ 63 | visitLiteral?: (ctx: LiteralContext) => Result; 64 | 65 | /** 66 | * Visit a parse tree produced by `ComposeParser.identifier`. 67 | * @param ctx the parse tree 68 | * @return the visitor result 69 | */ 70 | visitIdentifier?: (ctx: IdentifierContext) => Result; 71 | } 72 | 73 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # DSL-based Composable application 2 | 3 | Scene: cross domain 4 | 5 | > A DSL as contract for orchestration API. 6 | 7 | ![Dispatcher](docs/architecture.svg) 8 | 9 | ## Usage 10 | 11 | Consumer <-> DSL(Protocol) <-> Producer 12 | 13 | 1. consumer, flow internal DSL to string as a protocol. 14 | 2. DSL, use antlr to generate lexer and parser 15 | 3. producer, parser string with language type, 16 | 17 | ```golang 18 | compose := consumer.NewCompose() 19 | compose.Source("12").Target("12.0") 20 | contract := compose.Build() 21 | 22 | fmt.Println(contract) 23 | // output: Book.source(12).target(12.0) 24 | 25 | flow := producer.Dispatcher(contract) 26 | fmt.Println(flow) 27 | // output: {"Id":"12","Title":"title","Name":"hello"} 28 | ``` 29 | 30 | ### Consumer 31 | 32 | output: generate string 33 | 34 | see in [consumer.go](consumer/consumer.go) 35 | 36 | ```go 37 | func (b *Compose) Source(id string) *Compose { 38 | source := "source(" + id + ")" 39 | b.builder.WriteString(source) 40 | return b 41 | } 42 | 43 | func (b *Compose) Target(id string) *Compose { 44 | source := ".target(" + id + ")" 45 | b.builder.WriteString(source) 46 | return b 47 | } 48 | 49 | func (b *Compose) Build() string { 50 | return "Book." + b.builder.String() 51 | } 52 | 53 | ``` 54 | 55 | ### Producer 56 | 57 | > parse string and call function 58 | 59 | #### parser: type system 60 | 61 | ```javascript 62 | for (let literal of (ctx.parameterList() as ParameterListContext).literal()) { 63 | let tokenIndex = (literal.children[0].payload as CommonToken).type; 64 | let symbolicName = this.vocabulary.getSymbolicName(tokenIndex); 65 | 66 | let typeName = ""; 67 | switch (symbolicName) { 68 | // ... 69 | default: 70 | } 71 | 72 | let paramType = new ParamType(); 73 | paramType.TypeName = typeName; 74 | paramType.TypeValue = literal.text; 75 | codeCall.Parameters.push(paramType) 76 | } 77 | 78 | ``` 79 | 80 | #### dispatcher 81 | 82 | 83 | ```javascript 84 | export function Dispatcher(str: string) { 85 | let flow = Compile(str) 86 | switch (flow.Entity) { 87 | case "Book": 88 | let book = new Book(); 89 | for (let call of flow.Calls) { 90 | switch (call.FunctionName) { 91 | case "Target": 92 | book.target() 93 | break; 94 | case "Source": 95 | book.source(call.Parameters[0].TypeValue) 96 | break; 97 | } 98 | } 99 | 100 | return JSON.stringify(book) 101 | default: 102 | return "" 103 | } 104 | } 105 | ``` -------------------------------------------------------------------------------- /producer/go/ast.go: -------------------------------------------------------------------------------- 1 | package producer 2 | 3 | import ( 4 | parser "dsl-compose/libs/go" 5 | "github.com/antlr/antlr4/runtime/Go/antlr" 6 | ) 7 | 8 | type EntityFlow struct { 9 | Entity string 10 | Calls []CodeCall 11 | } 12 | 13 | type CodeCall struct { 14 | FunctionName string 15 | Parameters []ParamType 16 | } 17 | 18 | type ParamType struct { 19 | TypeName string 20 | TypeValue string 21 | } 22 | 23 | type EntityListener struct { 24 | *parser.BaseComposeParserListener 25 | flow EntityFlow 26 | ruleNames []string 27 | symbolicNames []string 28 | } 29 | 30 | func NewTreeShapeListener(ruleNames []string, symbolicNames []string) *EntityListener { 31 | return &EntityListener{ 32 | ruleNames: ruleNames, 33 | symbolicNames: symbolicNames, 34 | flow: EntityFlow{}, 35 | } 36 | } 37 | 38 | func (t *EntityListener) EnterEntityModifier(ctx *parser.EntityModifierContext) { 39 | t.flow.Entity = ctx.GetText() 40 | } 41 | 42 | func (t *EntityListener) EnterEntityCall(ctx *parser.EntityCallContext) { 43 | call := CodeCall{ 44 | FunctionName: ctx.Identifier().GetText(), 45 | } 46 | 47 | paramList := ctx.ParameterList().(*parser.ParameterListContext) 48 | for _, lit := range paramList.AllLiteral() { 49 | literal := lit.(*parser.LiteralContext) 50 | 51 | payload := literal.GetChildren()[0].GetPayload() 52 | index := payload.(*antlr.CommonToken).GetTokenType() 53 | 54 | typeName := t.ruleNames[literal.GetRuleIndex()] 55 | 56 | switch t.symbolicNames[index] { 57 | case "IntegerLiteral": 58 | typeName = "int" 59 | case "FloatingPointLiteral": 60 | typeName = "float" 61 | case "BooleanLiteral": 62 | typeName = "bool" 63 | case "CharacterLiteral": 64 | typeName = "char" 65 | case "StringLiteral": 66 | typeName = "string" 67 | case "NullLiteral": 68 | typeName = "null" 69 | default: 70 | 71 | } 72 | 73 | paramType := ParamType{ 74 | TypeName: typeName, 75 | TypeValue: literal.GetText(), 76 | } 77 | call.Parameters = append(call.Parameters, paramType) 78 | } 79 | 80 | t.flow.Calls = append(t.flow.Calls, call) 81 | } 82 | 83 | func (t *EntityListener) Entity() EntityFlow { 84 | return t.flow 85 | } 86 | 87 | func Compile(str string) EntityFlow { 88 | input := antlr.NewInputStream(str) 89 | lexer := parser.NewComposeLexer(input) 90 | stream := antlr.NewCommonTokenStream(lexer, 0) 91 | 92 | p := parser.NewComposeParser(stream) 93 | p.AddErrorListener(antlr.NewDiagnosticErrorListener(true)) 94 | 95 | p.BuildParseTrees = true 96 | tree := p.CompilationUnit() 97 | 98 | listener := NewTreeShapeListener(p.GetRuleNames(), p.GetSymbolicNames()) 99 | antlr.ParseTreeWalkerDefault.Walk(listener, tree) 100 | 101 | return listener.Entity() 102 | } 103 | -------------------------------------------------------------------------------- /libs/go/composeparser_base_listener.go: -------------------------------------------------------------------------------- 1 | // Code generated from ComposeParser.g4 by ANTLR 4.9.3. DO NOT EDIT. 2 | 3 | package parser // ComposeParser 4 | 5 | import "github.com/antlr/antlr4/runtime/Go/antlr" 6 | 7 | // BaseComposeParserListener is a complete listener for a parse tree produced by ComposeParser. 8 | type BaseComposeParserListener struct{} 9 | 10 | var _ ComposeParserListener = &BaseComposeParserListener{} 11 | 12 | // VisitTerminal is called when a terminal node is visited. 13 | func (s *BaseComposeParserListener) VisitTerminal(node antlr.TerminalNode) {} 14 | 15 | // VisitErrorNode is called when an error node is visited. 16 | func (s *BaseComposeParserListener) VisitErrorNode(node antlr.ErrorNode) {} 17 | 18 | // EnterEveryRule is called when any rule is entered. 19 | func (s *BaseComposeParserListener) EnterEveryRule(ctx antlr.ParserRuleContext) {} 20 | 21 | // ExitEveryRule is called when any rule is exited. 22 | func (s *BaseComposeParserListener) ExitEveryRule(ctx antlr.ParserRuleContext) {} 23 | 24 | // EnterCompilationUnit is called when production compilationUnit is entered. 25 | func (s *BaseComposeParserListener) EnterCompilationUnit(ctx *CompilationUnitContext) {} 26 | 27 | // ExitCompilationUnit is called when production compilationUnit is exited. 28 | func (s *BaseComposeParserListener) ExitCompilationUnit(ctx *CompilationUnitContext) {} 29 | 30 | // EnterEntityDecl is called when production entityDecl is entered. 31 | func (s *BaseComposeParserListener) EnterEntityDecl(ctx *EntityDeclContext) {} 32 | 33 | // ExitEntityDecl is called when production entityDecl is exited. 34 | func (s *BaseComposeParserListener) ExitEntityDecl(ctx *EntityDeclContext) {} 35 | 36 | // EnterEntityModifier is called when production entityModifier is entered. 37 | func (s *BaseComposeParserListener) EnterEntityModifier(ctx *EntityModifierContext) {} 38 | 39 | // ExitEntityModifier is called when production entityModifier is exited. 40 | func (s *BaseComposeParserListener) ExitEntityModifier(ctx *EntityModifierContext) {} 41 | 42 | // EnterEntityCall is called when production entityCall is entered. 43 | func (s *BaseComposeParserListener) EnterEntityCall(ctx *EntityCallContext) {} 44 | 45 | // ExitEntityCall is called when production entityCall is exited. 46 | func (s *BaseComposeParserListener) ExitEntityCall(ctx *EntityCallContext) {} 47 | 48 | // EnterParameterList is called when production parameterList is entered. 49 | func (s *BaseComposeParserListener) EnterParameterList(ctx *ParameterListContext) {} 50 | 51 | // ExitParameterList is called when production parameterList is exited. 52 | func (s *BaseComposeParserListener) ExitParameterList(ctx *ParameterListContext) {} 53 | 54 | // EnterLiteral is called when production literal is entered. 55 | func (s *BaseComposeParserListener) EnterLiteral(ctx *LiteralContext) {} 56 | 57 | // ExitLiteral is called when production literal is exited. 58 | func (s *BaseComposeParserListener) ExitLiteral(ctx *LiteralContext) {} 59 | 60 | // EnterIdentifier is called when production identifier is entered. 61 | func (s *BaseComposeParserListener) EnterIdentifier(ctx *IdentifierContext) {} 62 | 63 | // ExitIdentifier is called when production identifier is exited. 64 | func (s *BaseComposeParserListener) ExitIdentifier(ctx *IdentifierContext) {} 65 | -------------------------------------------------------------------------------- /producer/js/grammar/ComposeParserListener.ts: -------------------------------------------------------------------------------- 1 | // Generated from ../../grammar/ComposeParser.g4 by ANTLR 4.9.0-SNAPSHOT 2 | 3 | 4 | import { ParseTreeListener } from "antlr4ts/tree/ParseTreeListener"; 5 | 6 | import { CompilationUnitContext } from "./ComposeParser"; 7 | import { EntityDeclContext } from "./ComposeParser"; 8 | import { EntityModifierContext } from "./ComposeParser"; 9 | import { EntityCallContext } from "./ComposeParser"; 10 | import { ParameterListContext } from "./ComposeParser"; 11 | import { LiteralContext } from "./ComposeParser"; 12 | import { IdentifierContext } from "./ComposeParser"; 13 | 14 | 15 | /** 16 | * This interface defines a complete listener for a parse tree produced by 17 | * `ComposeParser`. 18 | */ 19 | export interface ComposeParserListener extends ParseTreeListener { 20 | /** 21 | * Enter a parse tree produced by `ComposeParser.compilationUnit`. 22 | * @param ctx the parse tree 23 | */ 24 | enterCompilationUnit?: (ctx: CompilationUnitContext) => void; 25 | /** 26 | * Exit a parse tree produced by `ComposeParser.compilationUnit`. 27 | * @param ctx the parse tree 28 | */ 29 | exitCompilationUnit?: (ctx: CompilationUnitContext) => void; 30 | 31 | /** 32 | * Enter a parse tree produced by `ComposeParser.entityDecl`. 33 | * @param ctx the parse tree 34 | */ 35 | enterEntityDecl?: (ctx: EntityDeclContext) => void; 36 | /** 37 | * Exit a parse tree produced by `ComposeParser.entityDecl`. 38 | * @param ctx the parse tree 39 | */ 40 | exitEntityDecl?: (ctx: EntityDeclContext) => void; 41 | 42 | /** 43 | * Enter a parse tree produced by `ComposeParser.entityModifier`. 44 | * @param ctx the parse tree 45 | */ 46 | enterEntityModifier?: (ctx: EntityModifierContext) => void; 47 | /** 48 | * Exit a parse tree produced by `ComposeParser.entityModifier`. 49 | * @param ctx the parse tree 50 | */ 51 | exitEntityModifier?: (ctx: EntityModifierContext) => void; 52 | 53 | /** 54 | * Enter a parse tree produced by `ComposeParser.entityCall`. 55 | * @param ctx the parse tree 56 | */ 57 | enterEntityCall?: (ctx: EntityCallContext) => void; 58 | /** 59 | * Exit a parse tree produced by `ComposeParser.entityCall`. 60 | * @param ctx the parse tree 61 | */ 62 | exitEntityCall?: (ctx: EntityCallContext) => void; 63 | 64 | /** 65 | * Enter a parse tree produced by `ComposeParser.parameterList`. 66 | * @param ctx the parse tree 67 | */ 68 | enterParameterList?: (ctx: ParameterListContext) => void; 69 | /** 70 | * Exit a parse tree produced by `ComposeParser.parameterList`. 71 | * @param ctx the parse tree 72 | */ 73 | exitParameterList?: (ctx: ParameterListContext) => void; 74 | 75 | /** 76 | * Enter a parse tree produced by `ComposeParser.literal`. 77 | * @param ctx the parse tree 78 | */ 79 | enterLiteral?: (ctx: LiteralContext) => void; 80 | /** 81 | * Exit a parse tree produced by `ComposeParser.literal`. 82 | * @param ctx the parse tree 83 | */ 84 | exitLiteral?: (ctx: LiteralContext) => void; 85 | 86 | /** 87 | * Enter a parse tree produced by `ComposeParser.identifier`. 88 | * @param ctx the parse tree 89 | */ 90 | enterIdentifier?: (ctx: IdentifierContext) => void; 91 | /** 92 | * Exit a parse tree produced by `ComposeParser.identifier`. 93 | * @param ctx the parse tree 94 | */ 95 | exitIdentifier?: (ctx: IdentifierContext) => void; 96 | } 97 | 98 | -------------------------------------------------------------------------------- /producer/js/src/ts/ComposeParserListener.ts: -------------------------------------------------------------------------------- 1 | // Generated from ../../grammar/ComposeParser.g4 by ANTLR 4.9.0-SNAPSHOT 2 | 3 | 4 | import { ParseTreeListener } from "antlr4ts/tree/ParseTreeListener"; 5 | 6 | import { CompilationUnitContext } from "./ComposeParser"; 7 | import { EntityDeclContext } from "./ComposeParser"; 8 | import { EntityModifierContext } from "./ComposeParser"; 9 | import { EntityCallContext } from "./ComposeParser"; 10 | import { ParameterListContext } from "./ComposeParser"; 11 | import { LiteralContext } from "./ComposeParser"; 12 | import { IdentifierContext } from "./ComposeParser"; 13 | 14 | 15 | /** 16 | * This interface defines a complete listener for a parse tree produced by 17 | * `ComposeParser`. 18 | */ 19 | export interface ComposeParserListener extends ParseTreeListener { 20 | /** 21 | * Enter a parse tree produced by `ComposeParser.compilationUnit`. 22 | * @param ctx the parse tree 23 | */ 24 | enterCompilationUnit?: (ctx: CompilationUnitContext) => void; 25 | /** 26 | * Exit a parse tree produced by `ComposeParser.compilationUnit`. 27 | * @param ctx the parse tree 28 | */ 29 | exitCompilationUnit?: (ctx: CompilationUnitContext) => void; 30 | 31 | /** 32 | * Enter a parse tree produced by `ComposeParser.entityDecl`. 33 | * @param ctx the parse tree 34 | */ 35 | enterEntityDecl?: (ctx: EntityDeclContext) => void; 36 | /** 37 | * Exit a parse tree produced by `ComposeParser.entityDecl`. 38 | * @param ctx the parse tree 39 | */ 40 | exitEntityDecl?: (ctx: EntityDeclContext) => void; 41 | 42 | /** 43 | * Enter a parse tree produced by `ComposeParser.entityModifier`. 44 | * @param ctx the parse tree 45 | */ 46 | enterEntityModifier?: (ctx: EntityModifierContext) => void; 47 | /** 48 | * Exit a parse tree produced by `ComposeParser.entityModifier`. 49 | * @param ctx the parse tree 50 | */ 51 | exitEntityModifier?: (ctx: EntityModifierContext) => void; 52 | 53 | /** 54 | * Enter a parse tree produced by `ComposeParser.entityCall`. 55 | * @param ctx the parse tree 56 | */ 57 | enterEntityCall?: (ctx: EntityCallContext) => void; 58 | /** 59 | * Exit a parse tree produced by `ComposeParser.entityCall`. 60 | * @param ctx the parse tree 61 | */ 62 | exitEntityCall?: (ctx: EntityCallContext) => void; 63 | 64 | /** 65 | * Enter a parse tree produced by `ComposeParser.parameterList`. 66 | * @param ctx the parse tree 67 | */ 68 | enterParameterList?: (ctx: ParameterListContext) => void; 69 | /** 70 | * Exit a parse tree produced by `ComposeParser.parameterList`. 71 | * @param ctx the parse tree 72 | */ 73 | exitParameterList?: (ctx: ParameterListContext) => void; 74 | 75 | /** 76 | * Enter a parse tree produced by `ComposeParser.literal`. 77 | * @param ctx the parse tree 78 | */ 79 | enterLiteral?: (ctx: LiteralContext) => void; 80 | /** 81 | * Exit a parse tree produced by `ComposeParser.literal`. 82 | * @param ctx the parse tree 83 | */ 84 | exitLiteral?: (ctx: LiteralContext) => void; 85 | 86 | /** 87 | * Enter a parse tree produced by `ComposeParser.identifier`. 88 | * @param ctx the parse tree 89 | */ 90 | enterIdentifier?: (ctx: IdentifierContext) => void; 91 | /** 92 | * Exit a parse tree produced by `ComposeParser.identifier`. 93 | * @param ctx the parse tree 94 | */ 95 | exitIdentifier?: (ctx: IdentifierContext) => void; 96 | } 97 | 98 | -------------------------------------------------------------------------------- /producer/js/src/ast.ts: -------------------------------------------------------------------------------- 1 | import {ANTLRInputStream, CommonToken, CommonTokenStream} from 'antlr4ts'; 2 | import {ComposeLexer} from "./ts/ComposeLexer"; 3 | import { 4 | CompilationUnitContext, 5 | ComposeParser, 6 | EntityCallContext, 7 | EntityModifierContext, 8 | ParameterListContext 9 | } from "./ts/ComposeParser"; 10 | import {ParseTreeWalker} from "antlr4ts/tree"; 11 | import {ComposeParserListener} from "./ts/ComposeParserListener"; 12 | import {Vocabulary} from "antlr4ts/Vocabulary"; 13 | 14 | interface IEntityFlow { 15 | Entity: String 16 | Calls: ICodeCall[] 17 | } 18 | 19 | class EntityFlow implements IEntityFlow { 20 | Calls: ICodeCall[] = []; 21 | Entity: String; 22 | } 23 | 24 | interface ICodeCall { 25 | FunctionName: string 26 | Parameters: IParamType[] 27 | } 28 | 29 | class CodeCall implements ICodeCall { 30 | FunctionName: string; 31 | Parameters: IParamType[]; 32 | } 33 | 34 | interface IParamType { 35 | TypeName: string 36 | TypeValue: string 37 | } 38 | 39 | class ParamType implements IParamType { 40 | TypeName: string; 41 | TypeValue: string; 42 | } 43 | 44 | class ComposeListener implements ComposeParserListener { 45 | public entity: EntityFlow; 46 | private vocabulary: Vocabulary; 47 | 48 | constructor(vocabulary: Vocabulary) { 49 | this.vocabulary = vocabulary; 50 | this.entity = new EntityFlow(); 51 | } 52 | 53 | enterEntityModifier(ctx: EntityModifierContext): void { 54 | this.entity.Entity = ctx.text; 55 | } 56 | 57 | enterEntityCall(ctx: EntityCallContext): void { 58 | let codeCall = new CodeCall(); 59 | codeCall.FunctionName = ctx.identifier().text; 60 | codeCall.Parameters = []; 61 | 62 | for (let literal of (ctx.parameterList() as ParameterListContext).literal()) { 63 | let tokenIndex = (literal.children[0].payload as CommonToken).type; 64 | let symbolicName = this.vocabulary.getSymbolicName(tokenIndex); 65 | 66 | let typeName = ""; 67 | switch (symbolicName) { 68 | case "IntegerLiteral": 69 | typeName = "int" 70 | break; 71 | case "FloatingPointLiteral": 72 | typeName = "float"; 73 | break; 74 | case "BooleanLiteral": 75 | typeName = "bool"; 76 | break; 77 | case "CharacterLiteral": 78 | typeName = "char"; 79 | break; 80 | case "StringLiteral": 81 | typeName = "string"; 82 | break; 83 | case "NullLiteral": 84 | typeName = "null"; 85 | break; 86 | default: 87 | 88 | } 89 | 90 | let paramType = new ParamType(); 91 | paramType.TypeName = typeName; 92 | paramType.TypeValue = literal.text; 93 | codeCall.Parameters.push(paramType) 94 | } 95 | 96 | this.entity.Calls.push(codeCall) 97 | } 98 | } 99 | 100 | export function Compile(str: string) { 101 | let inputStream = new ANTLRInputStream(str); 102 | let lexer = new ComposeLexer(inputStream); 103 | let tokenStream = new CommonTokenStream(lexer); 104 | let parser = new ComposeParser(tokenStream); 105 | let tree = parser.compilationUnit(); 106 | 107 | const listener = new ComposeListener(parser.vocabulary); 108 | ParseTreeWalker.DEFAULT.walk(listener as any, tree) 109 | 110 | return listener.entity 111 | } 112 | -------------------------------------------------------------------------------- /producer/js/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "antlr4@^4.9.3": 6 | "integrity" "sha512-qNy2odgsa0skmNMCuxzXhM4M8J1YDaPv3TI+vCdnOAanu0N982wBrSqziDKRDctEZLZy9VffqIZXc0UGjjSP/g==" 7 | "resolved" "https://registry.npmjs.org/antlr4/-/antlr4-4.9.3.tgz" 8 | "version" "4.9.3" 9 | 10 | "antlr4ts-cli@^0.5.0-alpha.4": 11 | "integrity" "sha512-lVPVBTA2CVHRYILSKilL6Jd4hAumhSZZWA7UbQNQrmaSSj7dPmmYaN4bOmZG79cOy0lS00i4LY68JZZjZMWVrw==" 12 | "resolved" "https://registry.npmjs.org/antlr4ts-cli/-/antlr4ts-cli-0.5.0-alpha.4.tgz" 13 | "version" "0.5.0-alpha.4" 14 | 15 | "antlr4ts@^0.5.0-alpha.4": 16 | "integrity" "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==" 17 | "resolved" "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz" 18 | "version" "0.5.0-alpha.4" 19 | 20 | "balanced-match@^1.0.0": 21 | "integrity" "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" 22 | "resolved" "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" 23 | "version" "1.0.2" 24 | 25 | "brace-expansion@^1.1.7": 26 | "integrity" "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==" 27 | "resolved" "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" 28 | "version" "1.1.11" 29 | dependencies: 30 | "balanced-match" "^1.0.0" 31 | "concat-map" "0.0.1" 32 | 33 | "concat-map@0.0.1": 34 | "integrity" "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" 35 | "resolved" "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" 36 | "version" "0.0.1" 37 | 38 | "esbuild-darwin-64@0.14.11": 39 | "integrity" "sha512-olq84ikh6TiBcrs3FnM4eR5VPPlcJcdW8BnUz/lNoEWYifYQ+Po5DuYV1oz1CTFMw4k6bQIZl8T3yxL+ZT2uvQ==" 40 | "resolved" "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.11.tgz" 41 | "version" "0.14.11" 42 | 43 | "esbuild@^0.14.11": 44 | "integrity" "sha512-xZvPtVj6yecnDeFb3KjjCM6i7B5TCAQZT77kkW/CpXTMnd6VLnRPKrUB1XHI1pSq6a4Zcy3BGueQ8VljqjDGCg==" 45 | "resolved" "https://registry.npmjs.org/esbuild/-/esbuild-0.14.11.tgz" 46 | "version" "0.14.11" 47 | optionalDependencies: 48 | "esbuild-android-arm64" "0.14.11" 49 | "esbuild-darwin-64" "0.14.11" 50 | "esbuild-darwin-arm64" "0.14.11" 51 | "esbuild-freebsd-64" "0.14.11" 52 | "esbuild-freebsd-arm64" "0.14.11" 53 | "esbuild-linux-32" "0.14.11" 54 | "esbuild-linux-64" "0.14.11" 55 | "esbuild-linux-arm" "0.14.11" 56 | "esbuild-linux-arm64" "0.14.11" 57 | "esbuild-linux-mips64le" "0.14.11" 58 | "esbuild-linux-ppc64le" "0.14.11" 59 | "esbuild-linux-s390x" "0.14.11" 60 | "esbuild-netbsd-64" "0.14.11" 61 | "esbuild-openbsd-64" "0.14.11" 62 | "esbuild-sunos-64" "0.14.11" 63 | "esbuild-windows-32" "0.14.11" 64 | "esbuild-windows-64" "0.14.11" 65 | "esbuild-windows-arm64" "0.14.11" 66 | 67 | "fs.realpath@^1.0.0": 68 | "integrity" "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" 69 | "resolved" "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" 70 | "version" "1.0.0" 71 | 72 | "glob@^7.2.0": 73 | "integrity" "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==" 74 | "resolved" "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz" 75 | "version" "7.2.0" 76 | dependencies: 77 | "fs.realpath" "^1.0.0" 78 | "inflight" "^1.0.4" 79 | "inherits" "2" 80 | "minimatch" "^3.0.4" 81 | "once" "^1.3.0" 82 | "path-is-absolute" "^1.0.0" 83 | 84 | "inflight@^1.0.4": 85 | "integrity" "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=" 86 | "resolved" "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" 87 | "version" "1.0.6" 88 | dependencies: 89 | "once" "^1.3.0" 90 | "wrappy" "1" 91 | 92 | "inherits@2": 93 | "integrity" "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 94 | "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" 95 | "version" "2.0.4" 96 | 97 | "minimatch@^3.0.4": 98 | "integrity" "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==" 99 | "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz" 100 | "version" "3.0.4" 101 | dependencies: 102 | "brace-expansion" "^1.1.7" 103 | 104 | "once@^1.3.0": 105 | "integrity" "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=" 106 | "resolved" "https://registry.npmjs.org/once/-/once-1.4.0.tgz" 107 | "version" "1.4.0" 108 | dependencies: 109 | "wrappy" "1" 110 | 111 | "path-is-absolute@^1.0.0": 112 | "integrity" "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" 113 | "resolved" "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" 114 | "version" "1.0.1" 115 | 116 | "wrappy@1": 117 | "integrity" "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 118 | "resolved" "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" 119 | "version" "1.0.2" 120 | -------------------------------------------------------------------------------- /grammar/ComposeLexer.g4: -------------------------------------------------------------------------------- 1 | lexer grammar ComposeLexer; 2 | 3 | LPAREN : '('; 4 | RPAREN : ')'; 5 | LBRACE : '{'; 6 | RBRACE : '}'; 7 | LBRACK : '['; 8 | RBRACK : ']'; 9 | SEMI : ';'; 10 | COMMA : ','; 11 | DOT : '.'; 12 | 13 | Book: 'Book'; 14 | Note: 'Note'; 15 | Paser: 'Paper'; 16 | 17 | Identifier 18 | : JavaLetter JavaLetterOrDigit* 19 | ; 20 | 21 | // §3.10.1 Integer Literals 22 | 23 | IntegerLiteral 24 | : DecimalIntegerLiteral 25 | | HexIntegerLiteral 26 | | OctalIntegerLiteral 27 | | BinaryIntegerLiteral 28 | ; 29 | 30 | fragment 31 | DecimalIntegerLiteral 32 | : DecimalNumeral IntegerTypeSuffix? 33 | ; 34 | 35 | fragment 36 | HexIntegerLiteral 37 | : HexNumeral IntegerTypeSuffix? 38 | ; 39 | 40 | fragment 41 | OctalIntegerLiteral 42 | : OctalNumeral IntegerTypeSuffix? 43 | ; 44 | 45 | fragment 46 | BinaryIntegerLiteral 47 | : BinaryNumeral IntegerTypeSuffix? 48 | ; 49 | 50 | fragment 51 | IntegerTypeSuffix 52 | : [lL] 53 | ; 54 | 55 | fragment 56 | DecimalNumeral 57 | : '0' 58 | | NonZeroDigit (Digits? | Underscores Digits) 59 | ; 60 | 61 | fragment 62 | Digits 63 | : Digit (DigitsAndUnderscores? Digit)? 64 | ; 65 | 66 | fragment 67 | Digit 68 | : '0' 69 | | NonZeroDigit 70 | ; 71 | 72 | fragment 73 | NonZeroDigit 74 | : [1-9] 75 | ; 76 | 77 | fragment 78 | DigitsAndUnderscores 79 | : DigitOrUnderscore+ 80 | ; 81 | 82 | fragment 83 | DigitOrUnderscore 84 | : Digit 85 | | '_' 86 | ; 87 | 88 | fragment 89 | Underscores 90 | : '_'+ 91 | ; 92 | 93 | fragment 94 | HexNumeral 95 | : '0' [xX] HexDigits 96 | ; 97 | 98 | fragment 99 | HexDigits 100 | : HexDigit (HexDigitsAndUnderscores? HexDigit)? 101 | ; 102 | 103 | fragment 104 | HexDigit 105 | : [0-9a-fA-F] 106 | ; 107 | 108 | fragment 109 | HexDigitsAndUnderscores 110 | : HexDigitOrUnderscore+ 111 | ; 112 | 113 | fragment 114 | HexDigitOrUnderscore 115 | : HexDigit 116 | | '_' 117 | ; 118 | 119 | fragment 120 | OctalNumeral 121 | : '0' Underscores? OctalDigits 122 | ; 123 | 124 | fragment 125 | OctalDigits 126 | : OctalDigit (OctalDigitsAndUnderscores? OctalDigit)? 127 | ; 128 | 129 | fragment 130 | OctalDigit 131 | : [0-7] 132 | ; 133 | 134 | fragment 135 | OctalDigitsAndUnderscores 136 | : OctalDigitOrUnderscore+ 137 | ; 138 | 139 | fragment 140 | OctalDigitOrUnderscore 141 | : OctalDigit 142 | | '_' 143 | ; 144 | 145 | fragment 146 | BinaryNumeral 147 | : '0' [bB] BinaryDigits 148 | ; 149 | 150 | fragment 151 | BinaryDigits 152 | : BinaryDigit (BinaryDigitsAndUnderscores? BinaryDigit)? 153 | ; 154 | 155 | fragment 156 | BinaryDigit 157 | : [01] 158 | ; 159 | 160 | fragment 161 | BinaryDigitsAndUnderscores 162 | : BinaryDigitOrUnderscore+ 163 | ; 164 | 165 | fragment 166 | BinaryDigitOrUnderscore 167 | : BinaryDigit 168 | | '_' 169 | ; 170 | 171 | // §3.10.2 Floating-Point Literals 172 | 173 | FloatingPointLiteral 174 | : DecimalFloatingPointLiteral 175 | | HexadecimalFloatingPointLiteral 176 | ; 177 | 178 | fragment 179 | DecimalFloatingPointLiteral 180 | : Digits '.' Digits? ExponentPart? FloatTypeSuffix? 181 | | '.' Digits ExponentPart? FloatTypeSuffix? 182 | | Digits ExponentPart FloatTypeSuffix? 183 | | Digits FloatTypeSuffix 184 | ; 185 | 186 | fragment 187 | ExponentPart 188 | : ExponentIndicator SignedInteger 189 | ; 190 | 191 | fragment 192 | ExponentIndicator 193 | : [eE] 194 | ; 195 | 196 | fragment 197 | SignedInteger 198 | : Sign? Digits 199 | ; 200 | 201 | fragment 202 | Sign 203 | : [+-] 204 | ; 205 | 206 | fragment 207 | FloatTypeSuffix 208 | : [fFdD] 209 | ; 210 | 211 | fragment 212 | HexadecimalFloatingPointLiteral 213 | : HexSignificand BinaryExponent FloatTypeSuffix? 214 | ; 215 | 216 | fragment 217 | HexSignificand 218 | : HexNumeral '.'? 219 | | '0' [xX] HexDigits? '.' HexDigits 220 | ; 221 | 222 | fragment 223 | BinaryExponent 224 | : BinaryExponentIndicator SignedInteger 225 | ; 226 | 227 | fragment 228 | BinaryExponentIndicator 229 | : [pP] 230 | ; 231 | 232 | // §3.10.3 Boolean Literals 233 | 234 | BooleanLiteral 235 | : 'true' 236 | | 'false' 237 | ; 238 | 239 | // §3.10.4 Character Literals 240 | 241 | CharacterLiteral 242 | : '\'' SingleCharacter '\'' 243 | | '\'' EscapeSequence '\'' 244 | ; 245 | 246 | fragment 247 | SingleCharacter 248 | : ~['\\\r\n] 249 | ; 250 | // §3.10.5 String Literals 251 | StringLiteral 252 | : '"' StringCharacters? '"' 253 | ; 254 | fragment 255 | StringCharacters 256 | : StringCharacter+ 257 | ; 258 | fragment 259 | StringCharacter 260 | : ~["\\\r\n] 261 | | EscapeSequence 262 | ; 263 | // §3.10.6 Escape Sequences for Character and String Literals 264 | fragment 265 | EscapeSequence 266 | : '\\' [btnfr"'\\] 267 | | OctalEscape 268 | | UnicodeEscape // This is not in the spec but prevents having to preprocess the input 269 | ; 270 | 271 | fragment 272 | OctalEscape 273 | : '\\' OctalDigit 274 | | '\\' OctalDigit OctalDigit 275 | | '\\' ZeroToThree OctalDigit OctalDigit 276 | ; 277 | 278 | fragment 279 | ZeroToThree 280 | : [0-3] 281 | ; 282 | 283 | // This is not in the spec but prevents having to preprocess the input 284 | fragment 285 | UnicodeEscape 286 | : '\\' 'u'+ HexDigit HexDigit HexDigit HexDigit 287 | ; 288 | 289 | // §3.10.7 The Null Literal 290 | 291 | NullLiteral 292 | : 'null' 293 | ; 294 | 295 | // §3.11 Separators 296 | 297 | fragment 298 | JavaLetter 299 | : [a-zA-Z$_] // these are the "java letters" below 0x7F 300 | | // covers all characters above 0x7F which are not a surrogate 301 | ~[\u0000-\u007F\uD800-\uDBFF] 302 | | // covers UTF-16 surrogate pairs encodings for U+10000 to U+10FFFF 303 | [\uD800-\uDBFF] [\uDC00-\uDFFF] 304 | ; 305 | 306 | fragment 307 | JavaLetterOrDigit 308 | : [a-zA-Z0-9$_] // these are the "java letters or digits" below 0x7F 309 | | // covers all characters above 0x7F which are not a surrogate 310 | ~[\u0000-\u007F\uD800-\uDBFF] 311 | | // covers UTF-16 surrogate pairs encodings for U+10000 to U+10FFFF 312 | [\uD800-\uDBFF] [\uDC00-\uDFFF] 313 | ; 314 | 315 | 316 | WS : [ \t\r\n\u000C]+ -> skip 317 | ; 318 | 319 | COMMENT 320 | : '/*' .*? '*/' -> channel(HIDDEN) 321 | ; 322 | 323 | LINE_COMMENT 324 | : '//' ~[\r\n]* -> channel(HIDDEN) 325 | ; 326 | -------------------------------------------------------------------------------- /docs/architecture.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Group 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | Internal DSL Builder 16 | (Golang) 17 | 18 | 19 | Internal DSL Builder 20 | (JavaScript) 21 | 22 | 23 | 24 | 25 | Consumer 26 | 27 | 28 | DSL 29 | 30 | 31 | Producer 32 | 33 | 34 | string 35 | 36 | 37 | json 38 | 39 | 40 | Parser(Antlr) 41 | 42 | 43 | API 44 | 45 | 46 | Dispatcher 47 | 48 | 49 | Dispatcher 50 | 51 | 52 | 53 | 54 | string 55 | 56 | 57 | json 58 | 59 | 60 | 61 | 62 | string 63 | 64 | 65 | json 66 | 67 | 68 | 69 | 70 | string 71 | 72 | 73 | json 74 | 75 | 76 | 77 | -------------------------------------------------------------------------------- /libs/go/ComposeLexer.interp: -------------------------------------------------------------------------------- 1 | token literal names: 2 | null 3 | '(' 4 | ')' 5 | '{' 6 | '}' 7 | '[' 8 | ']' 9 | ';' 10 | ',' 11 | '.' 12 | 'Book' 13 | 'Note' 14 | 'Paper' 15 | null 16 | null 17 | null 18 | null 19 | null 20 | null 21 | 'null' 22 | null 23 | null 24 | null 25 | 26 | token symbolic names: 27 | null 28 | LPAREN 29 | RPAREN 30 | LBRACE 31 | RBRACE 32 | LBRACK 33 | RBRACK 34 | SEMI 35 | COMMA 36 | DOT 37 | Book 38 | Note 39 | Paser 40 | Identifier 41 | IntegerLiteral 42 | FloatingPointLiteral 43 | BooleanLiteral 44 | CharacterLiteral 45 | StringLiteral 46 | NullLiteral 47 | WS 48 | COMMENT 49 | LINE_COMMENT 50 | 51 | rule names: 52 | LPAREN 53 | RPAREN 54 | LBRACE 55 | RBRACE 56 | LBRACK 57 | RBRACK 58 | SEMI 59 | COMMA 60 | DOT 61 | Book 62 | Note 63 | Paser 64 | Identifier 65 | IntegerLiteral 66 | DecimalIntegerLiteral 67 | HexIntegerLiteral 68 | OctalIntegerLiteral 69 | BinaryIntegerLiteral 70 | IntegerTypeSuffix 71 | DecimalNumeral 72 | Digits 73 | Digit 74 | NonZeroDigit 75 | DigitsAndUnderscores 76 | DigitOrUnderscore 77 | Underscores 78 | HexNumeral 79 | HexDigits 80 | HexDigit 81 | HexDigitsAndUnderscores 82 | HexDigitOrUnderscore 83 | OctalNumeral 84 | OctalDigits 85 | OctalDigit 86 | OctalDigitsAndUnderscores 87 | OctalDigitOrUnderscore 88 | BinaryNumeral 89 | BinaryDigits 90 | BinaryDigit 91 | BinaryDigitsAndUnderscores 92 | BinaryDigitOrUnderscore 93 | FloatingPointLiteral 94 | DecimalFloatingPointLiteral 95 | ExponentPart 96 | ExponentIndicator 97 | SignedInteger 98 | Sign 99 | FloatTypeSuffix 100 | HexadecimalFloatingPointLiteral 101 | HexSignificand 102 | BinaryExponent 103 | BinaryExponentIndicator 104 | BooleanLiteral 105 | CharacterLiteral 106 | SingleCharacter 107 | StringLiteral 108 | StringCharacters 109 | StringCharacter 110 | EscapeSequence 111 | OctalEscape 112 | ZeroToThree 113 | UnicodeEscape 114 | NullLiteral 115 | JavaLetter 116 | JavaLetterOrDigit 117 | WS 118 | COMMENT 119 | LINE_COMMENT 120 | 121 | channel names: 122 | DEFAULT_TOKEN_CHANNEL 123 | HIDDEN 124 | 125 | mode names: 126 | DEFAULT_MODE 127 | 128 | atn: 129 | [3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 24, 500, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 3, 2, 3, 2, 3, 3, 3, 3, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 7, 14, 176, 10, 14, 12, 14, 14, 14, 179, 11, 14, 3, 15, 3, 15, 3, 15, 3, 15, 5, 15, 185, 10, 15, 3, 16, 3, 16, 5, 16, 189, 10, 16, 3, 17, 3, 17, 5, 17, 193, 10, 17, 3, 18, 3, 18, 5, 18, 197, 10, 18, 3, 19, 3, 19, 5, 19, 201, 10, 19, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 5, 21, 208, 10, 21, 3, 21, 3, 21, 3, 21, 5, 21, 213, 10, 21, 5, 21, 215, 10, 21, 3, 22, 3, 22, 5, 22, 219, 10, 22, 3, 22, 5, 22, 222, 10, 22, 3, 23, 3, 23, 5, 23, 226, 10, 23, 3, 24, 3, 24, 3, 25, 6, 25, 231, 10, 25, 13, 25, 14, 25, 232, 3, 26, 3, 26, 5, 26, 237, 10, 26, 3, 27, 6, 27, 240, 10, 27, 13, 27, 14, 27, 241, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 5, 29, 250, 10, 29, 3, 29, 5, 29, 253, 10, 29, 3, 30, 3, 30, 3, 31, 6, 31, 258, 10, 31, 13, 31, 14, 31, 259, 3, 32, 3, 32, 5, 32, 264, 10, 32, 3, 33, 3, 33, 5, 33, 268, 10, 33, 3, 33, 3, 33, 3, 34, 3, 34, 5, 34, 274, 10, 34, 3, 34, 5, 34, 277, 10, 34, 3, 35, 3, 35, 3, 36, 6, 36, 282, 10, 36, 13, 36, 14, 36, 283, 3, 37, 3, 37, 5, 37, 288, 10, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 5, 39, 296, 10, 39, 3, 39, 5, 39, 299, 10, 39, 3, 40, 3, 40, 3, 41, 6, 41, 304, 10, 41, 13, 41, 14, 41, 305, 3, 42, 3, 42, 5, 42, 310, 10, 42, 3, 43, 3, 43, 5, 43, 314, 10, 43, 3, 44, 3, 44, 3, 44, 5, 44, 319, 10, 44, 3, 44, 5, 44, 322, 10, 44, 3, 44, 5, 44, 325, 10, 44, 3, 44, 3, 44, 3, 44, 5, 44, 330, 10, 44, 3, 44, 5, 44, 333, 10, 44, 3, 44, 3, 44, 3, 44, 5, 44, 338, 10, 44, 3, 44, 3, 44, 3, 44, 5, 44, 343, 10, 44, 3, 45, 3, 45, 3, 45, 3, 46, 3, 46, 3, 47, 5, 47, 351, 10, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 5, 50, 362, 10, 50, 3, 51, 3, 51, 5, 51, 366, 10, 51, 3, 51, 3, 51, 3, 51, 5, 51, 371, 10, 51, 3, 51, 3, 51, 5, 51, 375, 10, 51, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 5, 54, 391, 10, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 5, 55, 401, 10, 55, 3, 56, 3, 56, 3, 57, 3, 57, 5, 57, 407, 10, 57, 3, 57, 3, 57, 3, 58, 6, 58, 412, 10, 58, 13, 58, 14, 58, 413, 3, 59, 3, 59, 5, 59, 418, 10, 59, 3, 60, 3, 60, 3, 60, 3, 60, 5, 60, 424, 10, 60, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 5, 61, 437, 10, 61, 3, 62, 3, 62, 3, 63, 3, 63, 6, 63, 443, 10, 63, 13, 63, 14, 63, 444, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 65, 5, 65, 461, 10, 65, 3, 66, 3, 66, 3, 66, 3, 66, 5, 66, 467, 10, 66, 3, 67, 6, 67, 470, 10, 67, 13, 67, 14, 67, 471, 3, 67, 3, 67, 3, 68, 3, 68, 3, 68, 3, 68, 7, 68, 480, 10, 68, 12, 68, 14, 68, 483, 11, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 69, 3, 69, 3, 69, 3, 69, 7, 69, 494, 10, 69, 12, 69, 14, 69, 497, 11, 69, 3, 69, 3, 69, 3, 481, 2, 70, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 2, 33, 2, 35, 2, 37, 2, 39, 2, 41, 2, 43, 2, 45, 2, 47, 2, 49, 2, 51, 2, 53, 2, 55, 2, 57, 2, 59, 2, 61, 2, 63, 2, 65, 2, 67, 2, 69, 2, 71, 2, 73, 2, 75, 2, 77, 2, 79, 2, 81, 2, 83, 2, 85, 17, 87, 2, 89, 2, 91, 2, 93, 2, 95, 2, 97, 2, 99, 2, 101, 2, 103, 2, 105, 2, 107, 18, 109, 19, 111, 2, 113, 20, 115, 2, 117, 2, 119, 2, 121, 2, 123, 2, 125, 2, 127, 21, 129, 2, 131, 2, 133, 22, 135, 23, 137, 24, 3, 2, 24, 4, 2, 78, 78, 110, 110, 3, 2, 51, 59, 4, 2, 90, 90, 122, 122, 5, 2, 50, 59, 67, 72, 99, 104, 3, 2, 50, 57, 4, 2, 68, 68, 100, 100, 3, 2, 50, 51, 4, 2, 71, 71, 103, 103, 4, 2, 45, 45, 47, 47, 6, 2, 70, 70, 72, 72, 102, 102, 104, 104, 4, 2, 82, 82, 114, 114, 6, 2, 12, 12, 15, 15, 41, 41, 94, 94, 6, 2, 12, 12, 15, 15, 36, 36, 94, 94, 10, 2, 36, 36, 41, 41, 94, 94, 100, 100, 104, 104, 112, 112, 116, 116, 118, 118, 3, 2, 50, 53, 6, 2, 38, 38, 67, 92, 97, 97, 99, 124, 4, 2, 2, 129, 55298, 56321, 3, 2, 55298, 56321, 3, 2, 56322, 57345, 7, 2, 38, 38, 50, 59, 67, 92, 97, 97, 99, 124, 5, 2, 11, 12, 14, 15, 34, 34, 4, 2, 12, 12, 15, 15, 2, 515, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, 2, 137, 3, 2, 2, 2, 3, 139, 3, 2, 2, 2, 5, 141, 3, 2, 2, 2, 7, 143, 3, 2, 2, 2, 9, 145, 3, 2, 2, 2, 11, 147, 3, 2, 2, 2, 13, 149, 3, 2, 2, 2, 15, 151, 3, 2, 2, 2, 17, 153, 3, 2, 2, 2, 19, 155, 3, 2, 2, 2, 21, 157, 3, 2, 2, 2, 23, 162, 3, 2, 2, 2, 25, 167, 3, 2, 2, 2, 27, 173, 3, 2, 2, 2, 29, 184, 3, 2, 2, 2, 31, 186, 3, 2, 2, 2, 33, 190, 3, 2, 2, 2, 35, 194, 3, 2, 2, 2, 37, 198, 3, 2, 2, 2, 39, 202, 3, 2, 2, 2, 41, 214, 3, 2, 2, 2, 43, 216, 3, 2, 2, 2, 45, 225, 3, 2, 2, 2, 47, 227, 3, 2, 2, 2, 49, 230, 3, 2, 2, 2, 51, 236, 3, 2, 2, 2, 53, 239, 3, 2, 2, 2, 55, 243, 3, 2, 2, 2, 57, 247, 3, 2, 2, 2, 59, 254, 3, 2, 2, 2, 61, 257, 3, 2, 2, 2, 63, 263, 3, 2, 2, 2, 65, 265, 3, 2, 2, 2, 67, 271, 3, 2, 2, 2, 69, 278, 3, 2, 2, 2, 71, 281, 3, 2, 2, 2, 73, 287, 3, 2, 2, 2, 75, 289, 3, 2, 2, 2, 77, 293, 3, 2, 2, 2, 79, 300, 3, 2, 2, 2, 81, 303, 3, 2, 2, 2, 83, 309, 3, 2, 2, 2, 85, 313, 3, 2, 2, 2, 87, 342, 3, 2, 2, 2, 89, 344, 3, 2, 2, 2, 91, 347, 3, 2, 2, 2, 93, 350, 3, 2, 2, 2, 95, 354, 3, 2, 2, 2, 97, 356, 3, 2, 2, 2, 99, 358, 3, 2, 2, 2, 101, 374, 3, 2, 2, 2, 103, 376, 3, 2, 2, 2, 105, 379, 3, 2, 2, 2, 107, 390, 3, 2, 2, 2, 109, 400, 3, 2, 2, 2, 111, 402, 3, 2, 2, 2, 113, 404, 3, 2, 2, 2, 115, 411, 3, 2, 2, 2, 117, 417, 3, 2, 2, 2, 119, 423, 3, 2, 2, 2, 121, 436, 3, 2, 2, 2, 123, 438, 3, 2, 2, 2, 125, 440, 3, 2, 2, 2, 127, 451, 3, 2, 2, 2, 129, 460, 3, 2, 2, 2, 131, 466, 3, 2, 2, 2, 133, 469, 3, 2, 2, 2, 135, 475, 3, 2, 2, 2, 137, 489, 3, 2, 2, 2, 139, 140, 7, 42, 2, 2, 140, 4, 3, 2, 2, 2, 141, 142, 7, 43, 2, 2, 142, 6, 3, 2, 2, 2, 143, 144, 7, 125, 2, 2, 144, 8, 3, 2, 2, 2, 145, 146, 7, 127, 2, 2, 146, 10, 3, 2, 2, 2, 147, 148, 7, 93, 2, 2, 148, 12, 3, 2, 2, 2, 149, 150, 7, 95, 2, 2, 150, 14, 3, 2, 2, 2, 151, 152, 7, 61, 2, 2, 152, 16, 3, 2, 2, 2, 153, 154, 7, 46, 2, 2, 154, 18, 3, 2, 2, 2, 155, 156, 7, 48, 2, 2, 156, 20, 3, 2, 2, 2, 157, 158, 7, 68, 2, 2, 158, 159, 7, 113, 2, 2, 159, 160, 7, 113, 2, 2, 160, 161, 7, 109, 2, 2, 161, 22, 3, 2, 2, 2, 162, 163, 7, 80, 2, 2, 163, 164, 7, 113, 2, 2, 164, 165, 7, 118, 2, 2, 165, 166, 7, 103, 2, 2, 166, 24, 3, 2, 2, 2, 167, 168, 7, 82, 2, 2, 168, 169, 7, 99, 2, 2, 169, 170, 7, 114, 2, 2, 170, 171, 7, 103, 2, 2, 171, 172, 7, 116, 2, 2, 172, 26, 3, 2, 2, 2, 173, 177, 5, 129, 65, 2, 174, 176, 5, 131, 66, 2, 175, 174, 3, 2, 2, 2, 176, 179, 3, 2, 2, 2, 177, 175, 3, 2, 2, 2, 177, 178, 3, 2, 2, 2, 178, 28, 3, 2, 2, 2, 179, 177, 3, 2, 2, 2, 180, 185, 5, 31, 16, 2, 181, 185, 5, 33, 17, 2, 182, 185, 5, 35, 18, 2, 183, 185, 5, 37, 19, 2, 184, 180, 3, 2, 2, 2, 184, 181, 3, 2, 2, 2, 184, 182, 3, 2, 2, 2, 184, 183, 3, 2, 2, 2, 185, 30, 3, 2, 2, 2, 186, 188, 5, 41, 21, 2, 187, 189, 5, 39, 20, 2, 188, 187, 3, 2, 2, 2, 188, 189, 3, 2, 2, 2, 189, 32, 3, 2, 2, 2, 190, 192, 5, 55, 28, 2, 191, 193, 5, 39, 20, 2, 192, 191, 3, 2, 2, 2, 192, 193, 3, 2, 2, 2, 193, 34, 3, 2, 2, 2, 194, 196, 5, 65, 33, 2, 195, 197, 5, 39, 20, 2, 196, 195, 3, 2, 2, 2, 196, 197, 3, 2, 2, 2, 197, 36, 3, 2, 2, 2, 198, 200, 5, 75, 38, 2, 199, 201, 5, 39, 20, 2, 200, 199, 3, 2, 2, 2, 200, 201, 3, 2, 2, 2, 201, 38, 3, 2, 2, 2, 202, 203, 9, 2, 2, 2, 203, 40, 3, 2, 2, 2, 204, 215, 7, 50, 2, 2, 205, 212, 5, 47, 24, 2, 206, 208, 5, 43, 22, 2, 207, 206, 3, 2, 2, 2, 207, 208, 3, 2, 2, 2, 208, 213, 3, 2, 2, 2, 209, 210, 5, 53, 27, 2, 210, 211, 5, 43, 22, 2, 211, 213, 3, 2, 2, 2, 212, 207, 3, 2, 2, 2, 212, 209, 3, 2, 2, 2, 213, 215, 3, 2, 2, 2, 214, 204, 3, 2, 2, 2, 214, 205, 3, 2, 2, 2, 215, 42, 3, 2, 2, 2, 216, 221, 5, 45, 23, 2, 217, 219, 5, 49, 25, 2, 218, 217, 3, 2, 2, 2, 218, 219, 3, 2, 2, 2, 219, 220, 3, 2, 2, 2, 220, 222, 5, 45, 23, 2, 221, 218, 3, 2, 2, 2, 221, 222, 3, 2, 2, 2, 222, 44, 3, 2, 2, 2, 223, 226, 7, 50, 2, 2, 224, 226, 5, 47, 24, 2, 225, 223, 3, 2, 2, 2, 225, 224, 3, 2, 2, 2, 226, 46, 3, 2, 2, 2, 227, 228, 9, 3, 2, 2, 228, 48, 3, 2, 2, 2, 229, 231, 5, 51, 26, 2, 230, 229, 3, 2, 2, 2, 231, 232, 3, 2, 2, 2, 232, 230, 3, 2, 2, 2, 232, 233, 3, 2, 2, 2, 233, 50, 3, 2, 2, 2, 234, 237, 5, 45, 23, 2, 235, 237, 7, 97, 2, 2, 236, 234, 3, 2, 2, 2, 236, 235, 3, 2, 2, 2, 237, 52, 3, 2, 2, 2, 238, 240, 7, 97, 2, 2, 239, 238, 3, 2, 2, 2, 240, 241, 3, 2, 2, 2, 241, 239, 3, 2, 2, 2, 241, 242, 3, 2, 2, 2, 242, 54, 3, 2, 2, 2, 243, 244, 7, 50, 2, 2, 244, 245, 9, 4, 2, 2, 245, 246, 5, 57, 29, 2, 246, 56, 3, 2, 2, 2, 247, 252, 5, 59, 30, 2, 248, 250, 5, 61, 31, 2, 249, 248, 3, 2, 2, 2, 249, 250, 3, 2, 2, 2, 250, 251, 3, 2, 2, 2, 251, 253, 5, 59, 30, 2, 252, 249, 3, 2, 2, 2, 252, 253, 3, 2, 2, 2, 253, 58, 3, 2, 2, 2, 254, 255, 9, 5, 2, 2, 255, 60, 3, 2, 2, 2, 256, 258, 5, 63, 32, 2, 257, 256, 3, 2, 2, 2, 258, 259, 3, 2, 2, 2, 259, 257, 3, 2, 2, 2, 259, 260, 3, 2, 2, 2, 260, 62, 3, 2, 2, 2, 261, 264, 5, 59, 30, 2, 262, 264, 7, 97, 2, 2, 263, 261, 3, 2, 2, 2, 263, 262, 3, 2, 2, 2, 264, 64, 3, 2, 2, 2, 265, 267, 7, 50, 2, 2, 266, 268, 5, 53, 27, 2, 267, 266, 3, 2, 2, 2, 267, 268, 3, 2, 2, 2, 268, 269, 3, 2, 2, 2, 269, 270, 5, 67, 34, 2, 270, 66, 3, 2, 2, 2, 271, 276, 5, 69, 35, 2, 272, 274, 5, 71, 36, 2, 273, 272, 3, 2, 2, 2, 273, 274, 3, 2, 2, 2, 274, 275, 3, 2, 2, 2, 275, 277, 5, 69, 35, 2, 276, 273, 3, 2, 2, 2, 276, 277, 3, 2, 2, 2, 277, 68, 3, 2, 2, 2, 278, 279, 9, 6, 2, 2, 279, 70, 3, 2, 2, 2, 280, 282, 5, 73, 37, 2, 281, 280, 3, 2, 2, 2, 282, 283, 3, 2, 2, 2, 283, 281, 3, 2, 2, 2, 283, 284, 3, 2, 2, 2, 284, 72, 3, 2, 2, 2, 285, 288, 5, 69, 35, 2, 286, 288, 7, 97, 2, 2, 287, 285, 3, 2, 2, 2, 287, 286, 3, 2, 2, 2, 288, 74, 3, 2, 2, 2, 289, 290, 7, 50, 2, 2, 290, 291, 9, 7, 2, 2, 291, 292, 5, 77, 39, 2, 292, 76, 3, 2, 2, 2, 293, 298, 5, 79, 40, 2, 294, 296, 5, 81, 41, 2, 295, 294, 3, 2, 2, 2, 295, 296, 3, 2, 2, 2, 296, 297, 3, 2, 2, 2, 297, 299, 5, 79, 40, 2, 298, 295, 3, 2, 2, 2, 298, 299, 3, 2, 2, 2, 299, 78, 3, 2, 2, 2, 300, 301, 9, 8, 2, 2, 301, 80, 3, 2, 2, 2, 302, 304, 5, 83, 42, 2, 303, 302, 3, 2, 2, 2, 304, 305, 3, 2, 2, 2, 305, 303, 3, 2, 2, 2, 305, 306, 3, 2, 2, 2, 306, 82, 3, 2, 2, 2, 307, 310, 5, 79, 40, 2, 308, 310, 7, 97, 2, 2, 309, 307, 3, 2, 2, 2, 309, 308, 3, 2, 2, 2, 310, 84, 3, 2, 2, 2, 311, 314, 5, 87, 44, 2, 312, 314, 5, 99, 50, 2, 313, 311, 3, 2, 2, 2, 313, 312, 3, 2, 2, 2, 314, 86, 3, 2, 2, 2, 315, 316, 5, 43, 22, 2, 316, 318, 7, 48, 2, 2, 317, 319, 5, 43, 22, 2, 318, 317, 3, 2, 2, 2, 318, 319, 3, 2, 2, 2, 319, 321, 3, 2, 2, 2, 320, 322, 5, 89, 45, 2, 321, 320, 3, 2, 2, 2, 321, 322, 3, 2, 2, 2, 322, 324, 3, 2, 2, 2, 323, 325, 5, 97, 49, 2, 324, 323, 3, 2, 2, 2, 324, 325, 3, 2, 2, 2, 325, 343, 3, 2, 2, 2, 326, 327, 7, 48, 2, 2, 327, 329, 5, 43, 22, 2, 328, 330, 5, 89, 45, 2, 329, 328, 3, 2, 2, 2, 329, 330, 3, 2, 2, 2, 330, 332, 3, 2, 2, 2, 331, 333, 5, 97, 49, 2, 332, 331, 3, 2, 2, 2, 332, 333, 3, 2, 2, 2, 333, 343, 3, 2, 2, 2, 334, 335, 5, 43, 22, 2, 335, 337, 5, 89, 45, 2, 336, 338, 5, 97, 49, 2, 337, 336, 3, 2, 2, 2, 337, 338, 3, 2, 2, 2, 338, 343, 3, 2, 2, 2, 339, 340, 5, 43, 22, 2, 340, 341, 5, 97, 49, 2, 341, 343, 3, 2, 2, 2, 342, 315, 3, 2, 2, 2, 342, 326, 3, 2, 2, 2, 342, 334, 3, 2, 2, 2, 342, 339, 3, 2, 2, 2, 343, 88, 3, 2, 2, 2, 344, 345, 5, 91, 46, 2, 345, 346, 5, 93, 47, 2, 346, 90, 3, 2, 2, 2, 347, 348, 9, 9, 2, 2, 348, 92, 3, 2, 2, 2, 349, 351, 5, 95, 48, 2, 350, 349, 3, 2, 2, 2, 350, 351, 3, 2, 2, 2, 351, 352, 3, 2, 2, 2, 352, 353, 5, 43, 22, 2, 353, 94, 3, 2, 2, 2, 354, 355, 9, 10, 2, 2, 355, 96, 3, 2, 2, 2, 356, 357, 9, 11, 2, 2, 357, 98, 3, 2, 2, 2, 358, 359, 5, 101, 51, 2, 359, 361, 5, 103, 52, 2, 360, 362, 5, 97, 49, 2, 361, 360, 3, 2, 2, 2, 361, 362, 3, 2, 2, 2, 362, 100, 3, 2, 2, 2, 363, 365, 5, 55, 28, 2, 364, 366, 7, 48, 2, 2, 365, 364, 3, 2, 2, 2, 365, 366, 3, 2, 2, 2, 366, 375, 3, 2, 2, 2, 367, 368, 7, 50, 2, 2, 368, 370, 9, 4, 2, 2, 369, 371, 5, 57, 29, 2, 370, 369, 3, 2, 2, 2, 370, 371, 3, 2, 2, 2, 371, 372, 3, 2, 2, 2, 372, 373, 7, 48, 2, 2, 373, 375, 5, 57, 29, 2, 374, 363, 3, 2, 2, 2, 374, 367, 3, 2, 2, 2, 375, 102, 3, 2, 2, 2, 376, 377, 5, 105, 53, 2, 377, 378, 5, 93, 47, 2, 378, 104, 3, 2, 2, 2, 379, 380, 9, 12, 2, 2, 380, 106, 3, 2, 2, 2, 381, 382, 7, 118, 2, 2, 382, 383, 7, 116, 2, 2, 383, 384, 7, 119, 2, 2, 384, 391, 7, 103, 2, 2, 385, 386, 7, 104, 2, 2, 386, 387, 7, 99, 2, 2, 387, 388, 7, 110, 2, 2, 388, 389, 7, 117, 2, 2, 389, 391, 7, 103, 2, 2, 390, 381, 3, 2, 2, 2, 390, 385, 3, 2, 2, 2, 391, 108, 3, 2, 2, 2, 392, 393, 7, 41, 2, 2, 393, 394, 5, 111, 56, 2, 394, 395, 7, 41, 2, 2, 395, 401, 3, 2, 2, 2, 396, 397, 7, 41, 2, 2, 397, 398, 5, 119, 60, 2, 398, 399, 7, 41, 2, 2, 399, 401, 3, 2, 2, 2, 400, 392, 3, 2, 2, 2, 400, 396, 3, 2, 2, 2, 401, 110, 3, 2, 2, 2, 402, 403, 10, 13, 2, 2, 403, 112, 3, 2, 2, 2, 404, 406, 7, 36, 2, 2, 405, 407, 5, 115, 58, 2, 406, 405, 3, 2, 2, 2, 406, 407, 3, 2, 2, 2, 407, 408, 3, 2, 2, 2, 408, 409, 7, 36, 2, 2, 409, 114, 3, 2, 2, 2, 410, 412, 5, 117, 59, 2, 411, 410, 3, 2, 2, 2, 412, 413, 3, 2, 2, 2, 413, 411, 3, 2, 2, 2, 413, 414, 3, 2, 2, 2, 414, 116, 3, 2, 2, 2, 415, 418, 10, 14, 2, 2, 416, 418, 5, 119, 60, 2, 417, 415, 3, 2, 2, 2, 417, 416, 3, 2, 2, 2, 418, 118, 3, 2, 2, 2, 419, 420, 7, 94, 2, 2, 420, 424, 9, 15, 2, 2, 421, 424, 5, 121, 61, 2, 422, 424, 5, 125, 63, 2, 423, 419, 3, 2, 2, 2, 423, 421, 3, 2, 2, 2, 423, 422, 3, 2, 2, 2, 424, 120, 3, 2, 2, 2, 425, 426, 7, 94, 2, 2, 426, 437, 5, 69, 35, 2, 427, 428, 7, 94, 2, 2, 428, 429, 5, 69, 35, 2, 429, 430, 5, 69, 35, 2, 430, 437, 3, 2, 2, 2, 431, 432, 7, 94, 2, 2, 432, 433, 5, 123, 62, 2, 433, 434, 5, 69, 35, 2, 434, 435, 5, 69, 35, 2, 435, 437, 3, 2, 2, 2, 436, 425, 3, 2, 2, 2, 436, 427, 3, 2, 2, 2, 436, 431, 3, 2, 2, 2, 437, 122, 3, 2, 2, 2, 438, 439, 9, 16, 2, 2, 439, 124, 3, 2, 2, 2, 440, 442, 7, 94, 2, 2, 441, 443, 7, 119, 2, 2, 442, 441, 3, 2, 2, 2, 443, 444, 3, 2, 2, 2, 444, 442, 3, 2, 2, 2, 444, 445, 3, 2, 2, 2, 445, 446, 3, 2, 2, 2, 446, 447, 5, 59, 30, 2, 447, 448, 5, 59, 30, 2, 448, 449, 5, 59, 30, 2, 449, 450, 5, 59, 30, 2, 450, 126, 3, 2, 2, 2, 451, 452, 7, 112, 2, 2, 452, 453, 7, 119, 2, 2, 453, 454, 7, 110, 2, 2, 454, 455, 7, 110, 2, 2, 455, 128, 3, 2, 2, 2, 456, 461, 9, 17, 2, 2, 457, 461, 10, 18, 2, 2, 458, 459, 9, 19, 2, 2, 459, 461, 9, 20, 2, 2, 460, 456, 3, 2, 2, 2, 460, 457, 3, 2, 2, 2, 460, 458, 3, 2, 2, 2, 461, 130, 3, 2, 2, 2, 462, 467, 9, 21, 2, 2, 463, 467, 10, 18, 2, 2, 464, 465, 9, 19, 2, 2, 465, 467, 9, 20, 2, 2, 466, 462, 3, 2, 2, 2, 466, 463, 3, 2, 2, 2, 466, 464, 3, 2, 2, 2, 467, 132, 3, 2, 2, 2, 468, 470, 9, 22, 2, 2, 469, 468, 3, 2, 2, 2, 470, 471, 3, 2, 2, 2, 471, 469, 3, 2, 2, 2, 471, 472, 3, 2, 2, 2, 472, 473, 3, 2, 2, 2, 473, 474, 8, 67, 2, 2, 474, 134, 3, 2, 2, 2, 475, 476, 7, 49, 2, 2, 476, 477, 7, 44, 2, 2, 477, 481, 3, 2, 2, 2, 478, 480, 11, 2, 2, 2, 479, 478, 3, 2, 2, 2, 480, 483, 3, 2, 2, 2, 481, 482, 3, 2, 2, 2, 481, 479, 3, 2, 2, 2, 482, 484, 3, 2, 2, 2, 483, 481, 3, 2, 2, 2, 484, 485, 7, 44, 2, 2, 485, 486, 7, 49, 2, 2, 486, 487, 3, 2, 2, 2, 487, 488, 8, 68, 3, 2, 488, 136, 3, 2, 2, 2, 489, 490, 7, 49, 2, 2, 490, 491, 7, 49, 2, 2, 491, 495, 3, 2, 2, 2, 492, 494, 10, 23, 2, 2, 493, 492, 3, 2, 2, 2, 494, 497, 3, 2, 2, 2, 495, 493, 3, 2, 2, 2, 495, 496, 3, 2, 2, 2, 496, 498, 3, 2, 2, 2, 497, 495, 3, 2, 2, 2, 498, 499, 8, 69, 3, 2, 499, 138, 3, 2, 2, 2, 57, 2, 177, 184, 188, 192, 196, 200, 207, 212, 214, 218, 221, 225, 232, 236, 241, 249, 252, 259, 263, 267, 273, 276, 283, 287, 295, 298, 305, 309, 313, 318, 321, 324, 329, 332, 337, 342, 350, 361, 365, 370, 374, 390, 400, 406, 413, 417, 423, 436, 444, 460, 466, 471, 481, 495, 4, 8, 2, 2, 2, 3, 2] -------------------------------------------------------------------------------- /producer/js/grammar/ComposeLexer.interp: -------------------------------------------------------------------------------- 1 | token literal names: 2 | null 3 | '(' 4 | ')' 5 | '{' 6 | '}' 7 | '[' 8 | ']' 9 | ';' 10 | ',' 11 | '.' 12 | 'Book' 13 | 'Note' 14 | 'Paper' 15 | null 16 | null 17 | null 18 | null 19 | null 20 | null 21 | 'null' 22 | null 23 | null 24 | null 25 | 26 | token symbolic names: 27 | null 28 | LPAREN 29 | RPAREN 30 | LBRACE 31 | RBRACE 32 | LBRACK 33 | RBRACK 34 | SEMI 35 | COMMA 36 | DOT 37 | Book 38 | Note 39 | Paser 40 | Identifier 41 | IntegerLiteral 42 | FloatingPointLiteral 43 | BooleanLiteral 44 | CharacterLiteral 45 | StringLiteral 46 | NullLiteral 47 | WS 48 | COMMENT 49 | LINE_COMMENT 50 | 51 | rule names: 52 | LPAREN 53 | RPAREN 54 | LBRACE 55 | RBRACE 56 | LBRACK 57 | RBRACK 58 | SEMI 59 | COMMA 60 | DOT 61 | Book 62 | Note 63 | Paser 64 | Identifier 65 | IntegerLiteral 66 | DecimalIntegerLiteral 67 | HexIntegerLiteral 68 | OctalIntegerLiteral 69 | BinaryIntegerLiteral 70 | IntegerTypeSuffix 71 | DecimalNumeral 72 | Digits 73 | Digit 74 | NonZeroDigit 75 | DigitsAndUnderscores 76 | DigitOrUnderscore 77 | Underscores 78 | HexNumeral 79 | HexDigits 80 | HexDigit 81 | HexDigitsAndUnderscores 82 | HexDigitOrUnderscore 83 | OctalNumeral 84 | OctalDigits 85 | OctalDigit 86 | OctalDigitsAndUnderscores 87 | OctalDigitOrUnderscore 88 | BinaryNumeral 89 | BinaryDigits 90 | BinaryDigit 91 | BinaryDigitsAndUnderscores 92 | BinaryDigitOrUnderscore 93 | FloatingPointLiteral 94 | DecimalFloatingPointLiteral 95 | ExponentPart 96 | ExponentIndicator 97 | SignedInteger 98 | Sign 99 | FloatTypeSuffix 100 | HexadecimalFloatingPointLiteral 101 | HexSignificand 102 | BinaryExponent 103 | BinaryExponentIndicator 104 | BooleanLiteral 105 | CharacterLiteral 106 | SingleCharacter 107 | StringLiteral 108 | StringCharacters 109 | StringCharacter 110 | EscapeSequence 111 | OctalEscape 112 | ZeroToThree 113 | UnicodeEscape 114 | NullLiteral 115 | JavaLetter 116 | JavaLetterOrDigit 117 | WS 118 | COMMENT 119 | LINE_COMMENT 120 | 121 | channel names: 122 | DEFAULT_TOKEN_CHANNEL 123 | HIDDEN 124 | 125 | mode names: 126 | DEFAULT_MODE 127 | 128 | atn: 129 | [3, 51485, 51898, 1421, 44986, 20307, 1543, 60043, 49729, 2, 24, 500, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 3, 2, 3, 2, 3, 3, 3, 3, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 7, 14, 176, 10, 14, 12, 14, 14, 14, 179, 11, 14, 3, 15, 3, 15, 3, 15, 3, 15, 5, 15, 185, 10, 15, 3, 16, 3, 16, 5, 16, 189, 10, 16, 3, 17, 3, 17, 5, 17, 193, 10, 17, 3, 18, 3, 18, 5, 18, 197, 10, 18, 3, 19, 3, 19, 5, 19, 201, 10, 19, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 5, 21, 208, 10, 21, 3, 21, 3, 21, 3, 21, 5, 21, 213, 10, 21, 5, 21, 215, 10, 21, 3, 22, 3, 22, 5, 22, 219, 10, 22, 3, 22, 5, 22, 222, 10, 22, 3, 23, 3, 23, 5, 23, 226, 10, 23, 3, 24, 3, 24, 3, 25, 6, 25, 231, 10, 25, 13, 25, 14, 25, 232, 3, 26, 3, 26, 5, 26, 237, 10, 26, 3, 27, 6, 27, 240, 10, 27, 13, 27, 14, 27, 241, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 5, 29, 250, 10, 29, 3, 29, 5, 29, 253, 10, 29, 3, 30, 3, 30, 3, 31, 6, 31, 258, 10, 31, 13, 31, 14, 31, 259, 3, 32, 3, 32, 5, 32, 264, 10, 32, 3, 33, 3, 33, 5, 33, 268, 10, 33, 3, 33, 3, 33, 3, 34, 3, 34, 5, 34, 274, 10, 34, 3, 34, 5, 34, 277, 10, 34, 3, 35, 3, 35, 3, 36, 6, 36, 282, 10, 36, 13, 36, 14, 36, 283, 3, 37, 3, 37, 5, 37, 288, 10, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 5, 39, 296, 10, 39, 3, 39, 5, 39, 299, 10, 39, 3, 40, 3, 40, 3, 41, 6, 41, 304, 10, 41, 13, 41, 14, 41, 305, 3, 42, 3, 42, 5, 42, 310, 10, 42, 3, 43, 3, 43, 5, 43, 314, 10, 43, 3, 44, 3, 44, 3, 44, 5, 44, 319, 10, 44, 3, 44, 5, 44, 322, 10, 44, 3, 44, 5, 44, 325, 10, 44, 3, 44, 3, 44, 3, 44, 5, 44, 330, 10, 44, 3, 44, 5, 44, 333, 10, 44, 3, 44, 3, 44, 3, 44, 5, 44, 338, 10, 44, 3, 44, 3, 44, 3, 44, 5, 44, 343, 10, 44, 3, 45, 3, 45, 3, 45, 3, 46, 3, 46, 3, 47, 5, 47, 351, 10, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 5, 50, 362, 10, 50, 3, 51, 3, 51, 5, 51, 366, 10, 51, 3, 51, 3, 51, 3, 51, 5, 51, 371, 10, 51, 3, 51, 3, 51, 5, 51, 375, 10, 51, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 5, 54, 391, 10, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 5, 55, 401, 10, 55, 3, 56, 3, 56, 3, 57, 3, 57, 5, 57, 407, 10, 57, 3, 57, 3, 57, 3, 58, 6, 58, 412, 10, 58, 13, 58, 14, 58, 413, 3, 59, 3, 59, 5, 59, 418, 10, 59, 3, 60, 3, 60, 3, 60, 3, 60, 5, 60, 424, 10, 60, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 5, 61, 437, 10, 61, 3, 62, 3, 62, 3, 63, 3, 63, 6, 63, 443, 10, 63, 13, 63, 14, 63, 444, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 65, 5, 65, 461, 10, 65, 3, 66, 3, 66, 3, 66, 3, 66, 5, 66, 467, 10, 66, 3, 67, 6, 67, 470, 10, 67, 13, 67, 14, 67, 471, 3, 67, 3, 67, 3, 68, 3, 68, 3, 68, 3, 68, 7, 68, 480, 10, 68, 12, 68, 14, 68, 483, 11, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 69, 3, 69, 3, 69, 3, 69, 7, 69, 494, 10, 69, 12, 69, 14, 69, 497, 11, 69, 3, 69, 3, 69, 3, 481, 2, 2, 70, 3, 2, 3, 5, 2, 4, 7, 2, 5, 9, 2, 6, 11, 2, 7, 13, 2, 8, 15, 2, 9, 17, 2, 10, 19, 2, 11, 21, 2, 12, 23, 2, 13, 25, 2, 14, 27, 2, 15, 29, 2, 16, 31, 2, 2, 33, 2, 2, 35, 2, 2, 37, 2, 2, 39, 2, 2, 41, 2, 2, 43, 2, 2, 45, 2, 2, 47, 2, 2, 49, 2, 2, 51, 2, 2, 53, 2, 2, 55, 2, 2, 57, 2, 2, 59, 2, 2, 61, 2, 2, 63, 2, 2, 65, 2, 2, 67, 2, 2, 69, 2, 2, 71, 2, 2, 73, 2, 2, 75, 2, 2, 77, 2, 2, 79, 2, 2, 81, 2, 2, 83, 2, 2, 85, 2, 17, 87, 2, 2, 89, 2, 2, 91, 2, 2, 93, 2, 2, 95, 2, 2, 97, 2, 2, 99, 2, 2, 101, 2, 2, 103, 2, 2, 105, 2, 2, 107, 2, 18, 109, 2, 19, 111, 2, 2, 113, 2, 20, 115, 2, 2, 117, 2, 2, 119, 2, 2, 121, 2, 2, 123, 2, 2, 125, 2, 2, 127, 2, 21, 129, 2, 2, 131, 2, 2, 133, 2, 22, 135, 2, 23, 137, 2, 24, 3, 2, 24, 4, 2, 78, 78, 110, 110, 3, 2, 51, 59, 4, 2, 90, 90, 122, 122, 5, 2, 50, 59, 67, 72, 99, 104, 3, 2, 50, 57, 4, 2, 68, 68, 100, 100, 3, 2, 50, 51, 4, 2, 71, 71, 103, 103, 4, 2, 45, 45, 47, 47, 6, 2, 70, 70, 72, 72, 102, 102, 104, 104, 4, 2, 82, 82, 114, 114, 6, 2, 12, 12, 15, 15, 41, 41, 94, 94, 6, 2, 12, 12, 15, 15, 36, 36, 94, 94, 10, 2, 36, 36, 41, 41, 94, 94, 100, 100, 104, 104, 112, 112, 116, 116, 118, 118, 3, 2, 50, 53, 6, 2, 38, 38, 67, 92, 97, 97, 99, 124, 4, 2, 2, 129, 55298, 56321, 3, 2, 55298, 56321, 3, 2, 56322, 57345, 7, 2, 38, 38, 50, 59, 67, 92, 97, 97, 99, 124, 5, 2, 11, 12, 14, 15, 34, 34, 4, 2, 12, 12, 15, 15, 2, 515, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, 2, 137, 3, 2, 2, 2, 3, 139, 3, 2, 2, 2, 5, 141, 3, 2, 2, 2, 7, 143, 3, 2, 2, 2, 9, 145, 3, 2, 2, 2, 11, 147, 3, 2, 2, 2, 13, 149, 3, 2, 2, 2, 15, 151, 3, 2, 2, 2, 17, 153, 3, 2, 2, 2, 19, 155, 3, 2, 2, 2, 21, 157, 3, 2, 2, 2, 23, 162, 3, 2, 2, 2, 25, 167, 3, 2, 2, 2, 27, 173, 3, 2, 2, 2, 29, 184, 3, 2, 2, 2, 31, 186, 3, 2, 2, 2, 33, 190, 3, 2, 2, 2, 35, 194, 3, 2, 2, 2, 37, 198, 3, 2, 2, 2, 39, 202, 3, 2, 2, 2, 41, 214, 3, 2, 2, 2, 43, 216, 3, 2, 2, 2, 45, 225, 3, 2, 2, 2, 47, 227, 3, 2, 2, 2, 49, 230, 3, 2, 2, 2, 51, 236, 3, 2, 2, 2, 53, 239, 3, 2, 2, 2, 55, 243, 3, 2, 2, 2, 57, 247, 3, 2, 2, 2, 59, 254, 3, 2, 2, 2, 61, 257, 3, 2, 2, 2, 63, 263, 3, 2, 2, 2, 65, 265, 3, 2, 2, 2, 67, 271, 3, 2, 2, 2, 69, 278, 3, 2, 2, 2, 71, 281, 3, 2, 2, 2, 73, 287, 3, 2, 2, 2, 75, 289, 3, 2, 2, 2, 77, 293, 3, 2, 2, 2, 79, 300, 3, 2, 2, 2, 81, 303, 3, 2, 2, 2, 83, 309, 3, 2, 2, 2, 85, 313, 3, 2, 2, 2, 87, 342, 3, 2, 2, 2, 89, 344, 3, 2, 2, 2, 91, 347, 3, 2, 2, 2, 93, 350, 3, 2, 2, 2, 95, 354, 3, 2, 2, 2, 97, 356, 3, 2, 2, 2, 99, 358, 3, 2, 2, 2, 101, 374, 3, 2, 2, 2, 103, 376, 3, 2, 2, 2, 105, 379, 3, 2, 2, 2, 107, 390, 3, 2, 2, 2, 109, 400, 3, 2, 2, 2, 111, 402, 3, 2, 2, 2, 113, 404, 3, 2, 2, 2, 115, 411, 3, 2, 2, 2, 117, 417, 3, 2, 2, 2, 119, 423, 3, 2, 2, 2, 121, 436, 3, 2, 2, 2, 123, 438, 3, 2, 2, 2, 125, 440, 3, 2, 2, 2, 127, 451, 3, 2, 2, 2, 129, 460, 3, 2, 2, 2, 131, 466, 3, 2, 2, 2, 133, 469, 3, 2, 2, 2, 135, 475, 3, 2, 2, 2, 137, 489, 3, 2, 2, 2, 139, 140, 7, 42, 2, 2, 140, 4, 3, 2, 2, 2, 141, 142, 7, 43, 2, 2, 142, 6, 3, 2, 2, 2, 143, 144, 7, 125, 2, 2, 144, 8, 3, 2, 2, 2, 145, 146, 7, 127, 2, 2, 146, 10, 3, 2, 2, 2, 147, 148, 7, 93, 2, 2, 148, 12, 3, 2, 2, 2, 149, 150, 7, 95, 2, 2, 150, 14, 3, 2, 2, 2, 151, 152, 7, 61, 2, 2, 152, 16, 3, 2, 2, 2, 153, 154, 7, 46, 2, 2, 154, 18, 3, 2, 2, 2, 155, 156, 7, 48, 2, 2, 156, 20, 3, 2, 2, 2, 157, 158, 7, 68, 2, 2, 158, 159, 7, 113, 2, 2, 159, 160, 7, 113, 2, 2, 160, 161, 7, 109, 2, 2, 161, 22, 3, 2, 2, 2, 162, 163, 7, 80, 2, 2, 163, 164, 7, 113, 2, 2, 164, 165, 7, 118, 2, 2, 165, 166, 7, 103, 2, 2, 166, 24, 3, 2, 2, 2, 167, 168, 7, 82, 2, 2, 168, 169, 7, 99, 2, 2, 169, 170, 7, 114, 2, 2, 170, 171, 7, 103, 2, 2, 171, 172, 7, 116, 2, 2, 172, 26, 3, 2, 2, 2, 173, 177, 5, 129, 65, 2, 174, 176, 5, 131, 66, 2, 175, 174, 3, 2, 2, 2, 176, 179, 3, 2, 2, 2, 177, 175, 3, 2, 2, 2, 177, 178, 3, 2, 2, 2, 178, 28, 3, 2, 2, 2, 179, 177, 3, 2, 2, 2, 180, 185, 5, 31, 16, 2, 181, 185, 5, 33, 17, 2, 182, 185, 5, 35, 18, 2, 183, 185, 5, 37, 19, 2, 184, 180, 3, 2, 2, 2, 184, 181, 3, 2, 2, 2, 184, 182, 3, 2, 2, 2, 184, 183, 3, 2, 2, 2, 185, 30, 3, 2, 2, 2, 186, 188, 5, 41, 21, 2, 187, 189, 5, 39, 20, 2, 188, 187, 3, 2, 2, 2, 188, 189, 3, 2, 2, 2, 189, 32, 3, 2, 2, 2, 190, 192, 5, 55, 28, 2, 191, 193, 5, 39, 20, 2, 192, 191, 3, 2, 2, 2, 192, 193, 3, 2, 2, 2, 193, 34, 3, 2, 2, 2, 194, 196, 5, 65, 33, 2, 195, 197, 5, 39, 20, 2, 196, 195, 3, 2, 2, 2, 196, 197, 3, 2, 2, 2, 197, 36, 3, 2, 2, 2, 198, 200, 5, 75, 38, 2, 199, 201, 5, 39, 20, 2, 200, 199, 3, 2, 2, 2, 200, 201, 3, 2, 2, 2, 201, 38, 3, 2, 2, 2, 202, 203, 9, 2, 2, 2, 203, 40, 3, 2, 2, 2, 204, 215, 7, 50, 2, 2, 205, 212, 5, 47, 24, 2, 206, 208, 5, 43, 22, 2, 207, 206, 3, 2, 2, 2, 207, 208, 3, 2, 2, 2, 208, 213, 3, 2, 2, 2, 209, 210, 5, 53, 27, 2, 210, 211, 5, 43, 22, 2, 211, 213, 3, 2, 2, 2, 212, 207, 3, 2, 2, 2, 212, 209, 3, 2, 2, 2, 213, 215, 3, 2, 2, 2, 214, 204, 3, 2, 2, 2, 214, 205, 3, 2, 2, 2, 215, 42, 3, 2, 2, 2, 216, 221, 5, 45, 23, 2, 217, 219, 5, 49, 25, 2, 218, 217, 3, 2, 2, 2, 218, 219, 3, 2, 2, 2, 219, 220, 3, 2, 2, 2, 220, 222, 5, 45, 23, 2, 221, 218, 3, 2, 2, 2, 221, 222, 3, 2, 2, 2, 222, 44, 3, 2, 2, 2, 223, 226, 7, 50, 2, 2, 224, 226, 5, 47, 24, 2, 225, 223, 3, 2, 2, 2, 225, 224, 3, 2, 2, 2, 226, 46, 3, 2, 2, 2, 227, 228, 9, 3, 2, 2, 228, 48, 3, 2, 2, 2, 229, 231, 5, 51, 26, 2, 230, 229, 3, 2, 2, 2, 231, 232, 3, 2, 2, 2, 232, 230, 3, 2, 2, 2, 232, 233, 3, 2, 2, 2, 233, 50, 3, 2, 2, 2, 234, 237, 5, 45, 23, 2, 235, 237, 7, 97, 2, 2, 236, 234, 3, 2, 2, 2, 236, 235, 3, 2, 2, 2, 237, 52, 3, 2, 2, 2, 238, 240, 7, 97, 2, 2, 239, 238, 3, 2, 2, 2, 240, 241, 3, 2, 2, 2, 241, 239, 3, 2, 2, 2, 241, 242, 3, 2, 2, 2, 242, 54, 3, 2, 2, 2, 243, 244, 7, 50, 2, 2, 244, 245, 9, 4, 2, 2, 245, 246, 5, 57, 29, 2, 246, 56, 3, 2, 2, 2, 247, 252, 5, 59, 30, 2, 248, 250, 5, 61, 31, 2, 249, 248, 3, 2, 2, 2, 249, 250, 3, 2, 2, 2, 250, 251, 3, 2, 2, 2, 251, 253, 5, 59, 30, 2, 252, 249, 3, 2, 2, 2, 252, 253, 3, 2, 2, 2, 253, 58, 3, 2, 2, 2, 254, 255, 9, 5, 2, 2, 255, 60, 3, 2, 2, 2, 256, 258, 5, 63, 32, 2, 257, 256, 3, 2, 2, 2, 258, 259, 3, 2, 2, 2, 259, 257, 3, 2, 2, 2, 259, 260, 3, 2, 2, 2, 260, 62, 3, 2, 2, 2, 261, 264, 5, 59, 30, 2, 262, 264, 7, 97, 2, 2, 263, 261, 3, 2, 2, 2, 263, 262, 3, 2, 2, 2, 264, 64, 3, 2, 2, 2, 265, 267, 7, 50, 2, 2, 266, 268, 5, 53, 27, 2, 267, 266, 3, 2, 2, 2, 267, 268, 3, 2, 2, 2, 268, 269, 3, 2, 2, 2, 269, 270, 5, 67, 34, 2, 270, 66, 3, 2, 2, 2, 271, 276, 5, 69, 35, 2, 272, 274, 5, 71, 36, 2, 273, 272, 3, 2, 2, 2, 273, 274, 3, 2, 2, 2, 274, 275, 3, 2, 2, 2, 275, 277, 5, 69, 35, 2, 276, 273, 3, 2, 2, 2, 276, 277, 3, 2, 2, 2, 277, 68, 3, 2, 2, 2, 278, 279, 9, 6, 2, 2, 279, 70, 3, 2, 2, 2, 280, 282, 5, 73, 37, 2, 281, 280, 3, 2, 2, 2, 282, 283, 3, 2, 2, 2, 283, 281, 3, 2, 2, 2, 283, 284, 3, 2, 2, 2, 284, 72, 3, 2, 2, 2, 285, 288, 5, 69, 35, 2, 286, 288, 7, 97, 2, 2, 287, 285, 3, 2, 2, 2, 287, 286, 3, 2, 2, 2, 288, 74, 3, 2, 2, 2, 289, 290, 7, 50, 2, 2, 290, 291, 9, 7, 2, 2, 291, 292, 5, 77, 39, 2, 292, 76, 3, 2, 2, 2, 293, 298, 5, 79, 40, 2, 294, 296, 5, 81, 41, 2, 295, 294, 3, 2, 2, 2, 295, 296, 3, 2, 2, 2, 296, 297, 3, 2, 2, 2, 297, 299, 5, 79, 40, 2, 298, 295, 3, 2, 2, 2, 298, 299, 3, 2, 2, 2, 299, 78, 3, 2, 2, 2, 300, 301, 9, 8, 2, 2, 301, 80, 3, 2, 2, 2, 302, 304, 5, 83, 42, 2, 303, 302, 3, 2, 2, 2, 304, 305, 3, 2, 2, 2, 305, 303, 3, 2, 2, 2, 305, 306, 3, 2, 2, 2, 306, 82, 3, 2, 2, 2, 307, 310, 5, 79, 40, 2, 308, 310, 7, 97, 2, 2, 309, 307, 3, 2, 2, 2, 309, 308, 3, 2, 2, 2, 310, 84, 3, 2, 2, 2, 311, 314, 5, 87, 44, 2, 312, 314, 5, 99, 50, 2, 313, 311, 3, 2, 2, 2, 313, 312, 3, 2, 2, 2, 314, 86, 3, 2, 2, 2, 315, 316, 5, 43, 22, 2, 316, 318, 7, 48, 2, 2, 317, 319, 5, 43, 22, 2, 318, 317, 3, 2, 2, 2, 318, 319, 3, 2, 2, 2, 319, 321, 3, 2, 2, 2, 320, 322, 5, 89, 45, 2, 321, 320, 3, 2, 2, 2, 321, 322, 3, 2, 2, 2, 322, 324, 3, 2, 2, 2, 323, 325, 5, 97, 49, 2, 324, 323, 3, 2, 2, 2, 324, 325, 3, 2, 2, 2, 325, 343, 3, 2, 2, 2, 326, 327, 7, 48, 2, 2, 327, 329, 5, 43, 22, 2, 328, 330, 5, 89, 45, 2, 329, 328, 3, 2, 2, 2, 329, 330, 3, 2, 2, 2, 330, 332, 3, 2, 2, 2, 331, 333, 5, 97, 49, 2, 332, 331, 3, 2, 2, 2, 332, 333, 3, 2, 2, 2, 333, 343, 3, 2, 2, 2, 334, 335, 5, 43, 22, 2, 335, 337, 5, 89, 45, 2, 336, 338, 5, 97, 49, 2, 337, 336, 3, 2, 2, 2, 337, 338, 3, 2, 2, 2, 338, 343, 3, 2, 2, 2, 339, 340, 5, 43, 22, 2, 340, 341, 5, 97, 49, 2, 341, 343, 3, 2, 2, 2, 342, 315, 3, 2, 2, 2, 342, 326, 3, 2, 2, 2, 342, 334, 3, 2, 2, 2, 342, 339, 3, 2, 2, 2, 343, 88, 3, 2, 2, 2, 344, 345, 5, 91, 46, 2, 345, 346, 5, 93, 47, 2, 346, 90, 3, 2, 2, 2, 347, 348, 9, 9, 2, 2, 348, 92, 3, 2, 2, 2, 349, 351, 5, 95, 48, 2, 350, 349, 3, 2, 2, 2, 350, 351, 3, 2, 2, 2, 351, 352, 3, 2, 2, 2, 352, 353, 5, 43, 22, 2, 353, 94, 3, 2, 2, 2, 354, 355, 9, 10, 2, 2, 355, 96, 3, 2, 2, 2, 356, 357, 9, 11, 2, 2, 357, 98, 3, 2, 2, 2, 358, 359, 5, 101, 51, 2, 359, 361, 5, 103, 52, 2, 360, 362, 5, 97, 49, 2, 361, 360, 3, 2, 2, 2, 361, 362, 3, 2, 2, 2, 362, 100, 3, 2, 2, 2, 363, 365, 5, 55, 28, 2, 364, 366, 7, 48, 2, 2, 365, 364, 3, 2, 2, 2, 365, 366, 3, 2, 2, 2, 366, 375, 3, 2, 2, 2, 367, 368, 7, 50, 2, 2, 368, 370, 9, 4, 2, 2, 369, 371, 5, 57, 29, 2, 370, 369, 3, 2, 2, 2, 370, 371, 3, 2, 2, 2, 371, 372, 3, 2, 2, 2, 372, 373, 7, 48, 2, 2, 373, 375, 5, 57, 29, 2, 374, 363, 3, 2, 2, 2, 374, 367, 3, 2, 2, 2, 375, 102, 3, 2, 2, 2, 376, 377, 5, 105, 53, 2, 377, 378, 5, 93, 47, 2, 378, 104, 3, 2, 2, 2, 379, 380, 9, 12, 2, 2, 380, 106, 3, 2, 2, 2, 381, 382, 7, 118, 2, 2, 382, 383, 7, 116, 2, 2, 383, 384, 7, 119, 2, 2, 384, 391, 7, 103, 2, 2, 385, 386, 7, 104, 2, 2, 386, 387, 7, 99, 2, 2, 387, 388, 7, 110, 2, 2, 388, 389, 7, 117, 2, 2, 389, 391, 7, 103, 2, 2, 390, 381, 3, 2, 2, 2, 390, 385, 3, 2, 2, 2, 391, 108, 3, 2, 2, 2, 392, 393, 7, 41, 2, 2, 393, 394, 5, 111, 56, 2, 394, 395, 7, 41, 2, 2, 395, 401, 3, 2, 2, 2, 396, 397, 7, 41, 2, 2, 397, 398, 5, 119, 60, 2, 398, 399, 7, 41, 2, 2, 399, 401, 3, 2, 2, 2, 400, 392, 3, 2, 2, 2, 400, 396, 3, 2, 2, 2, 401, 110, 3, 2, 2, 2, 402, 403, 10, 13, 2, 2, 403, 112, 3, 2, 2, 2, 404, 406, 7, 36, 2, 2, 405, 407, 5, 115, 58, 2, 406, 405, 3, 2, 2, 2, 406, 407, 3, 2, 2, 2, 407, 408, 3, 2, 2, 2, 408, 409, 7, 36, 2, 2, 409, 114, 3, 2, 2, 2, 410, 412, 5, 117, 59, 2, 411, 410, 3, 2, 2, 2, 412, 413, 3, 2, 2, 2, 413, 411, 3, 2, 2, 2, 413, 414, 3, 2, 2, 2, 414, 116, 3, 2, 2, 2, 415, 418, 10, 14, 2, 2, 416, 418, 5, 119, 60, 2, 417, 415, 3, 2, 2, 2, 417, 416, 3, 2, 2, 2, 418, 118, 3, 2, 2, 2, 419, 420, 7, 94, 2, 2, 420, 424, 9, 15, 2, 2, 421, 424, 5, 121, 61, 2, 422, 424, 5, 125, 63, 2, 423, 419, 3, 2, 2, 2, 423, 421, 3, 2, 2, 2, 423, 422, 3, 2, 2, 2, 424, 120, 3, 2, 2, 2, 425, 426, 7, 94, 2, 2, 426, 437, 5, 69, 35, 2, 427, 428, 7, 94, 2, 2, 428, 429, 5, 69, 35, 2, 429, 430, 5, 69, 35, 2, 430, 437, 3, 2, 2, 2, 431, 432, 7, 94, 2, 2, 432, 433, 5, 123, 62, 2, 433, 434, 5, 69, 35, 2, 434, 435, 5, 69, 35, 2, 435, 437, 3, 2, 2, 2, 436, 425, 3, 2, 2, 2, 436, 427, 3, 2, 2, 2, 436, 431, 3, 2, 2, 2, 437, 122, 3, 2, 2, 2, 438, 439, 9, 16, 2, 2, 439, 124, 3, 2, 2, 2, 440, 442, 7, 94, 2, 2, 441, 443, 7, 119, 2, 2, 442, 441, 3, 2, 2, 2, 443, 444, 3, 2, 2, 2, 444, 442, 3, 2, 2, 2, 444, 445, 3, 2, 2, 2, 445, 446, 3, 2, 2, 2, 446, 447, 5, 59, 30, 2, 447, 448, 5, 59, 30, 2, 448, 449, 5, 59, 30, 2, 449, 450, 5, 59, 30, 2, 450, 126, 3, 2, 2, 2, 451, 452, 7, 112, 2, 2, 452, 453, 7, 119, 2, 2, 453, 454, 7, 110, 2, 2, 454, 455, 7, 110, 2, 2, 455, 128, 3, 2, 2, 2, 456, 461, 9, 17, 2, 2, 457, 461, 10, 18, 2, 2, 458, 459, 9, 19, 2, 2, 459, 461, 9, 20, 2, 2, 460, 456, 3, 2, 2, 2, 460, 457, 3, 2, 2, 2, 460, 458, 3, 2, 2, 2, 461, 130, 3, 2, 2, 2, 462, 467, 9, 21, 2, 2, 463, 467, 10, 18, 2, 2, 464, 465, 9, 19, 2, 2, 465, 467, 9, 20, 2, 2, 466, 462, 3, 2, 2, 2, 466, 463, 3, 2, 2, 2, 466, 464, 3, 2, 2, 2, 467, 132, 3, 2, 2, 2, 468, 470, 9, 22, 2, 2, 469, 468, 3, 2, 2, 2, 470, 471, 3, 2, 2, 2, 471, 469, 3, 2, 2, 2, 471, 472, 3, 2, 2, 2, 472, 473, 3, 2, 2, 2, 473, 474, 8, 67, 2, 2, 474, 134, 3, 2, 2, 2, 475, 476, 7, 49, 2, 2, 476, 477, 7, 44, 2, 2, 477, 481, 3, 2, 2, 2, 478, 480, 11, 2, 2, 2, 479, 478, 3, 2, 2, 2, 480, 483, 3, 2, 2, 2, 481, 482, 3, 2, 2, 2, 481, 479, 3, 2, 2, 2, 482, 484, 3, 2, 2, 2, 483, 481, 3, 2, 2, 2, 484, 485, 7, 44, 2, 2, 485, 486, 7, 49, 2, 2, 486, 487, 3, 2, 2, 2, 487, 488, 8, 68, 3, 2, 488, 136, 3, 2, 2, 2, 489, 490, 7, 49, 2, 2, 490, 491, 7, 49, 2, 2, 491, 495, 3, 2, 2, 2, 492, 494, 10, 23, 2, 2, 493, 492, 3, 2, 2, 2, 494, 497, 3, 2, 2, 2, 495, 493, 3, 2, 2, 2, 495, 496, 3, 2, 2, 2, 496, 498, 3, 2, 2, 2, 497, 495, 3, 2, 2, 2, 498, 499, 8, 69, 3, 2, 499, 138, 3, 2, 2, 2, 57, 2, 177, 184, 188, 192, 196, 200, 207, 212, 214, 218, 221, 225, 232, 236, 241, 249, 252, 259, 263, 267, 273, 276, 283, 287, 295, 298, 305, 309, 313, 318, 321, 324, 329, 332, 337, 342, 350, 361, 365, 370, 374, 390, 400, 406, 413, 417, 423, 436, 444, 460, 466, 471, 481, 495, 4, 8, 2, 2, 2, 3, 2] -------------------------------------------------------------------------------- /producer/js/src/ts/ComposeLexer.interp: -------------------------------------------------------------------------------- 1 | token literal names: 2 | null 3 | '(' 4 | ')' 5 | '{' 6 | '}' 7 | '[' 8 | ']' 9 | ';' 10 | ',' 11 | '.' 12 | 'Book' 13 | 'Note' 14 | 'Paper' 15 | null 16 | null 17 | null 18 | null 19 | null 20 | null 21 | 'null' 22 | null 23 | null 24 | null 25 | 26 | token symbolic names: 27 | null 28 | LPAREN 29 | RPAREN 30 | LBRACE 31 | RBRACE 32 | LBRACK 33 | RBRACK 34 | SEMI 35 | COMMA 36 | DOT 37 | Book 38 | Note 39 | Paser 40 | Identifier 41 | IntegerLiteral 42 | FloatingPointLiteral 43 | BooleanLiteral 44 | CharacterLiteral 45 | StringLiteral 46 | NullLiteral 47 | WS 48 | COMMENT 49 | LINE_COMMENT 50 | 51 | rule names: 52 | LPAREN 53 | RPAREN 54 | LBRACE 55 | RBRACE 56 | LBRACK 57 | RBRACK 58 | SEMI 59 | COMMA 60 | DOT 61 | Book 62 | Note 63 | Paser 64 | Identifier 65 | IntegerLiteral 66 | DecimalIntegerLiteral 67 | HexIntegerLiteral 68 | OctalIntegerLiteral 69 | BinaryIntegerLiteral 70 | IntegerTypeSuffix 71 | DecimalNumeral 72 | Digits 73 | Digit 74 | NonZeroDigit 75 | DigitsAndUnderscores 76 | DigitOrUnderscore 77 | Underscores 78 | HexNumeral 79 | HexDigits 80 | HexDigit 81 | HexDigitsAndUnderscores 82 | HexDigitOrUnderscore 83 | OctalNumeral 84 | OctalDigits 85 | OctalDigit 86 | OctalDigitsAndUnderscores 87 | OctalDigitOrUnderscore 88 | BinaryNumeral 89 | BinaryDigits 90 | BinaryDigit 91 | BinaryDigitsAndUnderscores 92 | BinaryDigitOrUnderscore 93 | FloatingPointLiteral 94 | DecimalFloatingPointLiteral 95 | ExponentPart 96 | ExponentIndicator 97 | SignedInteger 98 | Sign 99 | FloatTypeSuffix 100 | HexadecimalFloatingPointLiteral 101 | HexSignificand 102 | BinaryExponent 103 | BinaryExponentIndicator 104 | BooleanLiteral 105 | CharacterLiteral 106 | SingleCharacter 107 | StringLiteral 108 | StringCharacters 109 | StringCharacter 110 | EscapeSequence 111 | OctalEscape 112 | ZeroToThree 113 | UnicodeEscape 114 | NullLiteral 115 | JavaLetter 116 | JavaLetterOrDigit 117 | WS 118 | COMMENT 119 | LINE_COMMENT 120 | 121 | channel names: 122 | DEFAULT_TOKEN_CHANNEL 123 | HIDDEN 124 | 125 | mode names: 126 | DEFAULT_MODE 127 | 128 | atn: 129 | [3, 51485, 51898, 1421, 44986, 20307, 1543, 60043, 49729, 2, 24, 500, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 3, 2, 3, 2, 3, 3, 3, 3, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 7, 14, 176, 10, 14, 12, 14, 14, 14, 179, 11, 14, 3, 15, 3, 15, 3, 15, 3, 15, 5, 15, 185, 10, 15, 3, 16, 3, 16, 5, 16, 189, 10, 16, 3, 17, 3, 17, 5, 17, 193, 10, 17, 3, 18, 3, 18, 5, 18, 197, 10, 18, 3, 19, 3, 19, 5, 19, 201, 10, 19, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 5, 21, 208, 10, 21, 3, 21, 3, 21, 3, 21, 5, 21, 213, 10, 21, 5, 21, 215, 10, 21, 3, 22, 3, 22, 5, 22, 219, 10, 22, 3, 22, 5, 22, 222, 10, 22, 3, 23, 3, 23, 5, 23, 226, 10, 23, 3, 24, 3, 24, 3, 25, 6, 25, 231, 10, 25, 13, 25, 14, 25, 232, 3, 26, 3, 26, 5, 26, 237, 10, 26, 3, 27, 6, 27, 240, 10, 27, 13, 27, 14, 27, 241, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 5, 29, 250, 10, 29, 3, 29, 5, 29, 253, 10, 29, 3, 30, 3, 30, 3, 31, 6, 31, 258, 10, 31, 13, 31, 14, 31, 259, 3, 32, 3, 32, 5, 32, 264, 10, 32, 3, 33, 3, 33, 5, 33, 268, 10, 33, 3, 33, 3, 33, 3, 34, 3, 34, 5, 34, 274, 10, 34, 3, 34, 5, 34, 277, 10, 34, 3, 35, 3, 35, 3, 36, 6, 36, 282, 10, 36, 13, 36, 14, 36, 283, 3, 37, 3, 37, 5, 37, 288, 10, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 5, 39, 296, 10, 39, 3, 39, 5, 39, 299, 10, 39, 3, 40, 3, 40, 3, 41, 6, 41, 304, 10, 41, 13, 41, 14, 41, 305, 3, 42, 3, 42, 5, 42, 310, 10, 42, 3, 43, 3, 43, 5, 43, 314, 10, 43, 3, 44, 3, 44, 3, 44, 5, 44, 319, 10, 44, 3, 44, 5, 44, 322, 10, 44, 3, 44, 5, 44, 325, 10, 44, 3, 44, 3, 44, 3, 44, 5, 44, 330, 10, 44, 3, 44, 5, 44, 333, 10, 44, 3, 44, 3, 44, 3, 44, 5, 44, 338, 10, 44, 3, 44, 3, 44, 3, 44, 5, 44, 343, 10, 44, 3, 45, 3, 45, 3, 45, 3, 46, 3, 46, 3, 47, 5, 47, 351, 10, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 5, 50, 362, 10, 50, 3, 51, 3, 51, 5, 51, 366, 10, 51, 3, 51, 3, 51, 3, 51, 5, 51, 371, 10, 51, 3, 51, 3, 51, 5, 51, 375, 10, 51, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 5, 54, 391, 10, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 5, 55, 401, 10, 55, 3, 56, 3, 56, 3, 57, 3, 57, 5, 57, 407, 10, 57, 3, 57, 3, 57, 3, 58, 6, 58, 412, 10, 58, 13, 58, 14, 58, 413, 3, 59, 3, 59, 5, 59, 418, 10, 59, 3, 60, 3, 60, 3, 60, 3, 60, 5, 60, 424, 10, 60, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 5, 61, 437, 10, 61, 3, 62, 3, 62, 3, 63, 3, 63, 6, 63, 443, 10, 63, 13, 63, 14, 63, 444, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 65, 5, 65, 461, 10, 65, 3, 66, 3, 66, 3, 66, 3, 66, 5, 66, 467, 10, 66, 3, 67, 6, 67, 470, 10, 67, 13, 67, 14, 67, 471, 3, 67, 3, 67, 3, 68, 3, 68, 3, 68, 3, 68, 7, 68, 480, 10, 68, 12, 68, 14, 68, 483, 11, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 69, 3, 69, 3, 69, 3, 69, 7, 69, 494, 10, 69, 12, 69, 14, 69, 497, 11, 69, 3, 69, 3, 69, 3, 481, 2, 2, 70, 3, 2, 3, 5, 2, 4, 7, 2, 5, 9, 2, 6, 11, 2, 7, 13, 2, 8, 15, 2, 9, 17, 2, 10, 19, 2, 11, 21, 2, 12, 23, 2, 13, 25, 2, 14, 27, 2, 15, 29, 2, 16, 31, 2, 2, 33, 2, 2, 35, 2, 2, 37, 2, 2, 39, 2, 2, 41, 2, 2, 43, 2, 2, 45, 2, 2, 47, 2, 2, 49, 2, 2, 51, 2, 2, 53, 2, 2, 55, 2, 2, 57, 2, 2, 59, 2, 2, 61, 2, 2, 63, 2, 2, 65, 2, 2, 67, 2, 2, 69, 2, 2, 71, 2, 2, 73, 2, 2, 75, 2, 2, 77, 2, 2, 79, 2, 2, 81, 2, 2, 83, 2, 2, 85, 2, 17, 87, 2, 2, 89, 2, 2, 91, 2, 2, 93, 2, 2, 95, 2, 2, 97, 2, 2, 99, 2, 2, 101, 2, 2, 103, 2, 2, 105, 2, 2, 107, 2, 18, 109, 2, 19, 111, 2, 2, 113, 2, 20, 115, 2, 2, 117, 2, 2, 119, 2, 2, 121, 2, 2, 123, 2, 2, 125, 2, 2, 127, 2, 21, 129, 2, 2, 131, 2, 2, 133, 2, 22, 135, 2, 23, 137, 2, 24, 3, 2, 24, 4, 2, 78, 78, 110, 110, 3, 2, 51, 59, 4, 2, 90, 90, 122, 122, 5, 2, 50, 59, 67, 72, 99, 104, 3, 2, 50, 57, 4, 2, 68, 68, 100, 100, 3, 2, 50, 51, 4, 2, 71, 71, 103, 103, 4, 2, 45, 45, 47, 47, 6, 2, 70, 70, 72, 72, 102, 102, 104, 104, 4, 2, 82, 82, 114, 114, 6, 2, 12, 12, 15, 15, 41, 41, 94, 94, 6, 2, 12, 12, 15, 15, 36, 36, 94, 94, 10, 2, 36, 36, 41, 41, 94, 94, 100, 100, 104, 104, 112, 112, 116, 116, 118, 118, 3, 2, 50, 53, 6, 2, 38, 38, 67, 92, 97, 97, 99, 124, 4, 2, 2, 129, 55298, 56321, 3, 2, 55298, 56321, 3, 2, 56322, 57345, 7, 2, 38, 38, 50, 59, 67, 92, 97, 97, 99, 124, 5, 2, 11, 12, 14, 15, 34, 34, 4, 2, 12, 12, 15, 15, 2, 515, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, 2, 137, 3, 2, 2, 2, 3, 139, 3, 2, 2, 2, 5, 141, 3, 2, 2, 2, 7, 143, 3, 2, 2, 2, 9, 145, 3, 2, 2, 2, 11, 147, 3, 2, 2, 2, 13, 149, 3, 2, 2, 2, 15, 151, 3, 2, 2, 2, 17, 153, 3, 2, 2, 2, 19, 155, 3, 2, 2, 2, 21, 157, 3, 2, 2, 2, 23, 162, 3, 2, 2, 2, 25, 167, 3, 2, 2, 2, 27, 173, 3, 2, 2, 2, 29, 184, 3, 2, 2, 2, 31, 186, 3, 2, 2, 2, 33, 190, 3, 2, 2, 2, 35, 194, 3, 2, 2, 2, 37, 198, 3, 2, 2, 2, 39, 202, 3, 2, 2, 2, 41, 214, 3, 2, 2, 2, 43, 216, 3, 2, 2, 2, 45, 225, 3, 2, 2, 2, 47, 227, 3, 2, 2, 2, 49, 230, 3, 2, 2, 2, 51, 236, 3, 2, 2, 2, 53, 239, 3, 2, 2, 2, 55, 243, 3, 2, 2, 2, 57, 247, 3, 2, 2, 2, 59, 254, 3, 2, 2, 2, 61, 257, 3, 2, 2, 2, 63, 263, 3, 2, 2, 2, 65, 265, 3, 2, 2, 2, 67, 271, 3, 2, 2, 2, 69, 278, 3, 2, 2, 2, 71, 281, 3, 2, 2, 2, 73, 287, 3, 2, 2, 2, 75, 289, 3, 2, 2, 2, 77, 293, 3, 2, 2, 2, 79, 300, 3, 2, 2, 2, 81, 303, 3, 2, 2, 2, 83, 309, 3, 2, 2, 2, 85, 313, 3, 2, 2, 2, 87, 342, 3, 2, 2, 2, 89, 344, 3, 2, 2, 2, 91, 347, 3, 2, 2, 2, 93, 350, 3, 2, 2, 2, 95, 354, 3, 2, 2, 2, 97, 356, 3, 2, 2, 2, 99, 358, 3, 2, 2, 2, 101, 374, 3, 2, 2, 2, 103, 376, 3, 2, 2, 2, 105, 379, 3, 2, 2, 2, 107, 390, 3, 2, 2, 2, 109, 400, 3, 2, 2, 2, 111, 402, 3, 2, 2, 2, 113, 404, 3, 2, 2, 2, 115, 411, 3, 2, 2, 2, 117, 417, 3, 2, 2, 2, 119, 423, 3, 2, 2, 2, 121, 436, 3, 2, 2, 2, 123, 438, 3, 2, 2, 2, 125, 440, 3, 2, 2, 2, 127, 451, 3, 2, 2, 2, 129, 460, 3, 2, 2, 2, 131, 466, 3, 2, 2, 2, 133, 469, 3, 2, 2, 2, 135, 475, 3, 2, 2, 2, 137, 489, 3, 2, 2, 2, 139, 140, 7, 42, 2, 2, 140, 4, 3, 2, 2, 2, 141, 142, 7, 43, 2, 2, 142, 6, 3, 2, 2, 2, 143, 144, 7, 125, 2, 2, 144, 8, 3, 2, 2, 2, 145, 146, 7, 127, 2, 2, 146, 10, 3, 2, 2, 2, 147, 148, 7, 93, 2, 2, 148, 12, 3, 2, 2, 2, 149, 150, 7, 95, 2, 2, 150, 14, 3, 2, 2, 2, 151, 152, 7, 61, 2, 2, 152, 16, 3, 2, 2, 2, 153, 154, 7, 46, 2, 2, 154, 18, 3, 2, 2, 2, 155, 156, 7, 48, 2, 2, 156, 20, 3, 2, 2, 2, 157, 158, 7, 68, 2, 2, 158, 159, 7, 113, 2, 2, 159, 160, 7, 113, 2, 2, 160, 161, 7, 109, 2, 2, 161, 22, 3, 2, 2, 2, 162, 163, 7, 80, 2, 2, 163, 164, 7, 113, 2, 2, 164, 165, 7, 118, 2, 2, 165, 166, 7, 103, 2, 2, 166, 24, 3, 2, 2, 2, 167, 168, 7, 82, 2, 2, 168, 169, 7, 99, 2, 2, 169, 170, 7, 114, 2, 2, 170, 171, 7, 103, 2, 2, 171, 172, 7, 116, 2, 2, 172, 26, 3, 2, 2, 2, 173, 177, 5, 129, 65, 2, 174, 176, 5, 131, 66, 2, 175, 174, 3, 2, 2, 2, 176, 179, 3, 2, 2, 2, 177, 175, 3, 2, 2, 2, 177, 178, 3, 2, 2, 2, 178, 28, 3, 2, 2, 2, 179, 177, 3, 2, 2, 2, 180, 185, 5, 31, 16, 2, 181, 185, 5, 33, 17, 2, 182, 185, 5, 35, 18, 2, 183, 185, 5, 37, 19, 2, 184, 180, 3, 2, 2, 2, 184, 181, 3, 2, 2, 2, 184, 182, 3, 2, 2, 2, 184, 183, 3, 2, 2, 2, 185, 30, 3, 2, 2, 2, 186, 188, 5, 41, 21, 2, 187, 189, 5, 39, 20, 2, 188, 187, 3, 2, 2, 2, 188, 189, 3, 2, 2, 2, 189, 32, 3, 2, 2, 2, 190, 192, 5, 55, 28, 2, 191, 193, 5, 39, 20, 2, 192, 191, 3, 2, 2, 2, 192, 193, 3, 2, 2, 2, 193, 34, 3, 2, 2, 2, 194, 196, 5, 65, 33, 2, 195, 197, 5, 39, 20, 2, 196, 195, 3, 2, 2, 2, 196, 197, 3, 2, 2, 2, 197, 36, 3, 2, 2, 2, 198, 200, 5, 75, 38, 2, 199, 201, 5, 39, 20, 2, 200, 199, 3, 2, 2, 2, 200, 201, 3, 2, 2, 2, 201, 38, 3, 2, 2, 2, 202, 203, 9, 2, 2, 2, 203, 40, 3, 2, 2, 2, 204, 215, 7, 50, 2, 2, 205, 212, 5, 47, 24, 2, 206, 208, 5, 43, 22, 2, 207, 206, 3, 2, 2, 2, 207, 208, 3, 2, 2, 2, 208, 213, 3, 2, 2, 2, 209, 210, 5, 53, 27, 2, 210, 211, 5, 43, 22, 2, 211, 213, 3, 2, 2, 2, 212, 207, 3, 2, 2, 2, 212, 209, 3, 2, 2, 2, 213, 215, 3, 2, 2, 2, 214, 204, 3, 2, 2, 2, 214, 205, 3, 2, 2, 2, 215, 42, 3, 2, 2, 2, 216, 221, 5, 45, 23, 2, 217, 219, 5, 49, 25, 2, 218, 217, 3, 2, 2, 2, 218, 219, 3, 2, 2, 2, 219, 220, 3, 2, 2, 2, 220, 222, 5, 45, 23, 2, 221, 218, 3, 2, 2, 2, 221, 222, 3, 2, 2, 2, 222, 44, 3, 2, 2, 2, 223, 226, 7, 50, 2, 2, 224, 226, 5, 47, 24, 2, 225, 223, 3, 2, 2, 2, 225, 224, 3, 2, 2, 2, 226, 46, 3, 2, 2, 2, 227, 228, 9, 3, 2, 2, 228, 48, 3, 2, 2, 2, 229, 231, 5, 51, 26, 2, 230, 229, 3, 2, 2, 2, 231, 232, 3, 2, 2, 2, 232, 230, 3, 2, 2, 2, 232, 233, 3, 2, 2, 2, 233, 50, 3, 2, 2, 2, 234, 237, 5, 45, 23, 2, 235, 237, 7, 97, 2, 2, 236, 234, 3, 2, 2, 2, 236, 235, 3, 2, 2, 2, 237, 52, 3, 2, 2, 2, 238, 240, 7, 97, 2, 2, 239, 238, 3, 2, 2, 2, 240, 241, 3, 2, 2, 2, 241, 239, 3, 2, 2, 2, 241, 242, 3, 2, 2, 2, 242, 54, 3, 2, 2, 2, 243, 244, 7, 50, 2, 2, 244, 245, 9, 4, 2, 2, 245, 246, 5, 57, 29, 2, 246, 56, 3, 2, 2, 2, 247, 252, 5, 59, 30, 2, 248, 250, 5, 61, 31, 2, 249, 248, 3, 2, 2, 2, 249, 250, 3, 2, 2, 2, 250, 251, 3, 2, 2, 2, 251, 253, 5, 59, 30, 2, 252, 249, 3, 2, 2, 2, 252, 253, 3, 2, 2, 2, 253, 58, 3, 2, 2, 2, 254, 255, 9, 5, 2, 2, 255, 60, 3, 2, 2, 2, 256, 258, 5, 63, 32, 2, 257, 256, 3, 2, 2, 2, 258, 259, 3, 2, 2, 2, 259, 257, 3, 2, 2, 2, 259, 260, 3, 2, 2, 2, 260, 62, 3, 2, 2, 2, 261, 264, 5, 59, 30, 2, 262, 264, 7, 97, 2, 2, 263, 261, 3, 2, 2, 2, 263, 262, 3, 2, 2, 2, 264, 64, 3, 2, 2, 2, 265, 267, 7, 50, 2, 2, 266, 268, 5, 53, 27, 2, 267, 266, 3, 2, 2, 2, 267, 268, 3, 2, 2, 2, 268, 269, 3, 2, 2, 2, 269, 270, 5, 67, 34, 2, 270, 66, 3, 2, 2, 2, 271, 276, 5, 69, 35, 2, 272, 274, 5, 71, 36, 2, 273, 272, 3, 2, 2, 2, 273, 274, 3, 2, 2, 2, 274, 275, 3, 2, 2, 2, 275, 277, 5, 69, 35, 2, 276, 273, 3, 2, 2, 2, 276, 277, 3, 2, 2, 2, 277, 68, 3, 2, 2, 2, 278, 279, 9, 6, 2, 2, 279, 70, 3, 2, 2, 2, 280, 282, 5, 73, 37, 2, 281, 280, 3, 2, 2, 2, 282, 283, 3, 2, 2, 2, 283, 281, 3, 2, 2, 2, 283, 284, 3, 2, 2, 2, 284, 72, 3, 2, 2, 2, 285, 288, 5, 69, 35, 2, 286, 288, 7, 97, 2, 2, 287, 285, 3, 2, 2, 2, 287, 286, 3, 2, 2, 2, 288, 74, 3, 2, 2, 2, 289, 290, 7, 50, 2, 2, 290, 291, 9, 7, 2, 2, 291, 292, 5, 77, 39, 2, 292, 76, 3, 2, 2, 2, 293, 298, 5, 79, 40, 2, 294, 296, 5, 81, 41, 2, 295, 294, 3, 2, 2, 2, 295, 296, 3, 2, 2, 2, 296, 297, 3, 2, 2, 2, 297, 299, 5, 79, 40, 2, 298, 295, 3, 2, 2, 2, 298, 299, 3, 2, 2, 2, 299, 78, 3, 2, 2, 2, 300, 301, 9, 8, 2, 2, 301, 80, 3, 2, 2, 2, 302, 304, 5, 83, 42, 2, 303, 302, 3, 2, 2, 2, 304, 305, 3, 2, 2, 2, 305, 303, 3, 2, 2, 2, 305, 306, 3, 2, 2, 2, 306, 82, 3, 2, 2, 2, 307, 310, 5, 79, 40, 2, 308, 310, 7, 97, 2, 2, 309, 307, 3, 2, 2, 2, 309, 308, 3, 2, 2, 2, 310, 84, 3, 2, 2, 2, 311, 314, 5, 87, 44, 2, 312, 314, 5, 99, 50, 2, 313, 311, 3, 2, 2, 2, 313, 312, 3, 2, 2, 2, 314, 86, 3, 2, 2, 2, 315, 316, 5, 43, 22, 2, 316, 318, 7, 48, 2, 2, 317, 319, 5, 43, 22, 2, 318, 317, 3, 2, 2, 2, 318, 319, 3, 2, 2, 2, 319, 321, 3, 2, 2, 2, 320, 322, 5, 89, 45, 2, 321, 320, 3, 2, 2, 2, 321, 322, 3, 2, 2, 2, 322, 324, 3, 2, 2, 2, 323, 325, 5, 97, 49, 2, 324, 323, 3, 2, 2, 2, 324, 325, 3, 2, 2, 2, 325, 343, 3, 2, 2, 2, 326, 327, 7, 48, 2, 2, 327, 329, 5, 43, 22, 2, 328, 330, 5, 89, 45, 2, 329, 328, 3, 2, 2, 2, 329, 330, 3, 2, 2, 2, 330, 332, 3, 2, 2, 2, 331, 333, 5, 97, 49, 2, 332, 331, 3, 2, 2, 2, 332, 333, 3, 2, 2, 2, 333, 343, 3, 2, 2, 2, 334, 335, 5, 43, 22, 2, 335, 337, 5, 89, 45, 2, 336, 338, 5, 97, 49, 2, 337, 336, 3, 2, 2, 2, 337, 338, 3, 2, 2, 2, 338, 343, 3, 2, 2, 2, 339, 340, 5, 43, 22, 2, 340, 341, 5, 97, 49, 2, 341, 343, 3, 2, 2, 2, 342, 315, 3, 2, 2, 2, 342, 326, 3, 2, 2, 2, 342, 334, 3, 2, 2, 2, 342, 339, 3, 2, 2, 2, 343, 88, 3, 2, 2, 2, 344, 345, 5, 91, 46, 2, 345, 346, 5, 93, 47, 2, 346, 90, 3, 2, 2, 2, 347, 348, 9, 9, 2, 2, 348, 92, 3, 2, 2, 2, 349, 351, 5, 95, 48, 2, 350, 349, 3, 2, 2, 2, 350, 351, 3, 2, 2, 2, 351, 352, 3, 2, 2, 2, 352, 353, 5, 43, 22, 2, 353, 94, 3, 2, 2, 2, 354, 355, 9, 10, 2, 2, 355, 96, 3, 2, 2, 2, 356, 357, 9, 11, 2, 2, 357, 98, 3, 2, 2, 2, 358, 359, 5, 101, 51, 2, 359, 361, 5, 103, 52, 2, 360, 362, 5, 97, 49, 2, 361, 360, 3, 2, 2, 2, 361, 362, 3, 2, 2, 2, 362, 100, 3, 2, 2, 2, 363, 365, 5, 55, 28, 2, 364, 366, 7, 48, 2, 2, 365, 364, 3, 2, 2, 2, 365, 366, 3, 2, 2, 2, 366, 375, 3, 2, 2, 2, 367, 368, 7, 50, 2, 2, 368, 370, 9, 4, 2, 2, 369, 371, 5, 57, 29, 2, 370, 369, 3, 2, 2, 2, 370, 371, 3, 2, 2, 2, 371, 372, 3, 2, 2, 2, 372, 373, 7, 48, 2, 2, 373, 375, 5, 57, 29, 2, 374, 363, 3, 2, 2, 2, 374, 367, 3, 2, 2, 2, 375, 102, 3, 2, 2, 2, 376, 377, 5, 105, 53, 2, 377, 378, 5, 93, 47, 2, 378, 104, 3, 2, 2, 2, 379, 380, 9, 12, 2, 2, 380, 106, 3, 2, 2, 2, 381, 382, 7, 118, 2, 2, 382, 383, 7, 116, 2, 2, 383, 384, 7, 119, 2, 2, 384, 391, 7, 103, 2, 2, 385, 386, 7, 104, 2, 2, 386, 387, 7, 99, 2, 2, 387, 388, 7, 110, 2, 2, 388, 389, 7, 117, 2, 2, 389, 391, 7, 103, 2, 2, 390, 381, 3, 2, 2, 2, 390, 385, 3, 2, 2, 2, 391, 108, 3, 2, 2, 2, 392, 393, 7, 41, 2, 2, 393, 394, 5, 111, 56, 2, 394, 395, 7, 41, 2, 2, 395, 401, 3, 2, 2, 2, 396, 397, 7, 41, 2, 2, 397, 398, 5, 119, 60, 2, 398, 399, 7, 41, 2, 2, 399, 401, 3, 2, 2, 2, 400, 392, 3, 2, 2, 2, 400, 396, 3, 2, 2, 2, 401, 110, 3, 2, 2, 2, 402, 403, 10, 13, 2, 2, 403, 112, 3, 2, 2, 2, 404, 406, 7, 36, 2, 2, 405, 407, 5, 115, 58, 2, 406, 405, 3, 2, 2, 2, 406, 407, 3, 2, 2, 2, 407, 408, 3, 2, 2, 2, 408, 409, 7, 36, 2, 2, 409, 114, 3, 2, 2, 2, 410, 412, 5, 117, 59, 2, 411, 410, 3, 2, 2, 2, 412, 413, 3, 2, 2, 2, 413, 411, 3, 2, 2, 2, 413, 414, 3, 2, 2, 2, 414, 116, 3, 2, 2, 2, 415, 418, 10, 14, 2, 2, 416, 418, 5, 119, 60, 2, 417, 415, 3, 2, 2, 2, 417, 416, 3, 2, 2, 2, 418, 118, 3, 2, 2, 2, 419, 420, 7, 94, 2, 2, 420, 424, 9, 15, 2, 2, 421, 424, 5, 121, 61, 2, 422, 424, 5, 125, 63, 2, 423, 419, 3, 2, 2, 2, 423, 421, 3, 2, 2, 2, 423, 422, 3, 2, 2, 2, 424, 120, 3, 2, 2, 2, 425, 426, 7, 94, 2, 2, 426, 437, 5, 69, 35, 2, 427, 428, 7, 94, 2, 2, 428, 429, 5, 69, 35, 2, 429, 430, 5, 69, 35, 2, 430, 437, 3, 2, 2, 2, 431, 432, 7, 94, 2, 2, 432, 433, 5, 123, 62, 2, 433, 434, 5, 69, 35, 2, 434, 435, 5, 69, 35, 2, 435, 437, 3, 2, 2, 2, 436, 425, 3, 2, 2, 2, 436, 427, 3, 2, 2, 2, 436, 431, 3, 2, 2, 2, 437, 122, 3, 2, 2, 2, 438, 439, 9, 16, 2, 2, 439, 124, 3, 2, 2, 2, 440, 442, 7, 94, 2, 2, 441, 443, 7, 119, 2, 2, 442, 441, 3, 2, 2, 2, 443, 444, 3, 2, 2, 2, 444, 442, 3, 2, 2, 2, 444, 445, 3, 2, 2, 2, 445, 446, 3, 2, 2, 2, 446, 447, 5, 59, 30, 2, 447, 448, 5, 59, 30, 2, 448, 449, 5, 59, 30, 2, 449, 450, 5, 59, 30, 2, 450, 126, 3, 2, 2, 2, 451, 452, 7, 112, 2, 2, 452, 453, 7, 119, 2, 2, 453, 454, 7, 110, 2, 2, 454, 455, 7, 110, 2, 2, 455, 128, 3, 2, 2, 2, 456, 461, 9, 17, 2, 2, 457, 461, 10, 18, 2, 2, 458, 459, 9, 19, 2, 2, 459, 461, 9, 20, 2, 2, 460, 456, 3, 2, 2, 2, 460, 457, 3, 2, 2, 2, 460, 458, 3, 2, 2, 2, 461, 130, 3, 2, 2, 2, 462, 467, 9, 21, 2, 2, 463, 467, 10, 18, 2, 2, 464, 465, 9, 19, 2, 2, 465, 467, 9, 20, 2, 2, 466, 462, 3, 2, 2, 2, 466, 463, 3, 2, 2, 2, 466, 464, 3, 2, 2, 2, 467, 132, 3, 2, 2, 2, 468, 470, 9, 22, 2, 2, 469, 468, 3, 2, 2, 2, 470, 471, 3, 2, 2, 2, 471, 469, 3, 2, 2, 2, 471, 472, 3, 2, 2, 2, 472, 473, 3, 2, 2, 2, 473, 474, 8, 67, 2, 2, 474, 134, 3, 2, 2, 2, 475, 476, 7, 49, 2, 2, 476, 477, 7, 44, 2, 2, 477, 481, 3, 2, 2, 2, 478, 480, 11, 2, 2, 2, 479, 478, 3, 2, 2, 2, 480, 483, 3, 2, 2, 2, 481, 482, 3, 2, 2, 2, 481, 479, 3, 2, 2, 2, 482, 484, 3, 2, 2, 2, 483, 481, 3, 2, 2, 2, 484, 485, 7, 44, 2, 2, 485, 486, 7, 49, 2, 2, 486, 487, 3, 2, 2, 2, 487, 488, 8, 68, 3, 2, 488, 136, 3, 2, 2, 2, 489, 490, 7, 49, 2, 2, 490, 491, 7, 49, 2, 2, 491, 495, 3, 2, 2, 2, 492, 494, 10, 23, 2, 2, 493, 492, 3, 2, 2, 2, 494, 497, 3, 2, 2, 2, 495, 493, 3, 2, 2, 2, 495, 496, 3, 2, 2, 2, 496, 498, 3, 2, 2, 2, 497, 495, 3, 2, 2, 2, 498, 499, 8, 69, 3, 2, 499, 138, 3, 2, 2, 2, 57, 2, 177, 184, 188, 192, 196, 200, 207, 212, 214, 218, 221, 225, 232, 236, 241, 249, 252, 259, 263, 267, 273, 276, 283, 287, 295, 298, 305, 309, 313, 318, 321, 324, 329, 332, 337, 342, 350, 361, 365, 370, 374, 390, 400, 406, 413, 417, 423, 436, 444, 460, 466, 471, 481, 495, 4, 8, 2, 2, 2, 3, 2] -------------------------------------------------------------------------------- /libs/go/compose_lexer.go: -------------------------------------------------------------------------------- 1 | // Code generated from ComposeLexer.g4 by ANTLR 4.9.3. DO NOT EDIT. 2 | 3 | package parser 4 | 5 | import ( 6 | "fmt" 7 | "unicode" 8 | 9 | "github.com/antlr/antlr4/runtime/Go/antlr" 10 | ) 11 | 12 | // Suppress unused import error 13 | var _ = fmt.Printf 14 | var _ = unicode.IsLetter 15 | 16 | var serializedLexerAtn = []uint16{ 17 | 3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 24, 500, 18 | 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 19 | 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 20 | 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 21 | 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 22 | 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 23 | 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 24 | 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 25 | 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 26 | 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 27 | 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 28 | 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 29 | 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 30 | 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 3, 2, 3, 31 | 2, 3, 3, 3, 3, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 32 | 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 12, 33 | 3, 12, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 34 | 14, 3, 14, 7, 14, 176, 10, 14, 12, 14, 14, 14, 179, 11, 14, 3, 15, 3, 15, 35 | 3, 15, 3, 15, 5, 15, 185, 10, 15, 3, 16, 3, 16, 5, 16, 189, 10, 16, 3, 36 | 17, 3, 17, 5, 17, 193, 10, 17, 3, 18, 3, 18, 5, 18, 197, 10, 18, 3, 19, 37 | 3, 19, 5, 19, 201, 10, 19, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 5, 21, 208, 38 | 10, 21, 3, 21, 3, 21, 3, 21, 5, 21, 213, 10, 21, 5, 21, 215, 10, 21, 3, 39 | 22, 3, 22, 5, 22, 219, 10, 22, 3, 22, 5, 22, 222, 10, 22, 3, 23, 3, 23, 40 | 5, 23, 226, 10, 23, 3, 24, 3, 24, 3, 25, 6, 25, 231, 10, 25, 13, 25, 14, 41 | 25, 232, 3, 26, 3, 26, 5, 26, 237, 10, 26, 3, 27, 6, 27, 240, 10, 27, 13, 42 | 27, 14, 27, 241, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 5, 29, 250, 43 | 10, 29, 3, 29, 5, 29, 253, 10, 29, 3, 30, 3, 30, 3, 31, 6, 31, 258, 10, 44 | 31, 13, 31, 14, 31, 259, 3, 32, 3, 32, 5, 32, 264, 10, 32, 3, 33, 3, 33, 45 | 5, 33, 268, 10, 33, 3, 33, 3, 33, 3, 34, 3, 34, 5, 34, 274, 10, 34, 3, 46 | 34, 5, 34, 277, 10, 34, 3, 35, 3, 35, 3, 36, 6, 36, 282, 10, 36, 13, 36, 47 | 14, 36, 283, 3, 37, 3, 37, 5, 37, 288, 10, 37, 3, 38, 3, 38, 3, 38, 3, 48 | 38, 3, 39, 3, 39, 5, 39, 296, 10, 39, 3, 39, 5, 39, 299, 10, 39, 3, 40, 49 | 3, 40, 3, 41, 6, 41, 304, 10, 41, 13, 41, 14, 41, 305, 3, 42, 3, 42, 5, 50 | 42, 310, 10, 42, 3, 43, 3, 43, 5, 43, 314, 10, 43, 3, 44, 3, 44, 3, 44, 51 | 5, 44, 319, 10, 44, 3, 44, 5, 44, 322, 10, 44, 3, 44, 5, 44, 325, 10, 44, 52 | 3, 44, 3, 44, 3, 44, 5, 44, 330, 10, 44, 3, 44, 5, 44, 333, 10, 44, 3, 53 | 44, 3, 44, 3, 44, 5, 44, 338, 10, 44, 3, 44, 3, 44, 3, 44, 5, 44, 343, 54 | 10, 44, 3, 45, 3, 45, 3, 45, 3, 46, 3, 46, 3, 47, 5, 47, 351, 10, 47, 3, 55 | 47, 3, 47, 3, 48, 3, 48, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 5, 50, 362, 56 | 10, 50, 3, 51, 3, 51, 5, 51, 366, 10, 51, 3, 51, 3, 51, 3, 51, 5, 51, 371, 57 | 10, 51, 3, 51, 3, 51, 5, 51, 375, 10, 51, 3, 52, 3, 52, 3, 52, 3, 53, 3, 58 | 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 5, 54, 59 | 391, 10, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 5, 60 | 55, 401, 10, 55, 3, 56, 3, 56, 3, 57, 3, 57, 5, 57, 407, 10, 57, 3, 57, 61 | 3, 57, 3, 58, 6, 58, 412, 10, 58, 13, 58, 14, 58, 413, 3, 59, 3, 59, 5, 62 | 59, 418, 10, 59, 3, 60, 3, 60, 3, 60, 3, 60, 5, 60, 424, 10, 60, 3, 61, 63 | 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 5, 64 | 61, 437, 10, 61, 3, 62, 3, 62, 3, 63, 3, 63, 6, 63, 443, 10, 63, 13, 63, 65 | 14, 63, 444, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 3, 66 | 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 65, 5, 65, 461, 10, 65, 3, 66, 3, 66, 67 | 3, 66, 3, 66, 5, 66, 467, 10, 66, 3, 67, 6, 67, 470, 10, 67, 13, 67, 14, 68 | 67, 471, 3, 67, 3, 67, 3, 68, 3, 68, 3, 68, 3, 68, 7, 68, 480, 10, 68, 69 | 12, 68, 14, 68, 483, 11, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 69, 70 | 3, 69, 3, 69, 3, 69, 7, 69, 494, 10, 69, 12, 69, 14, 69, 497, 11, 69, 3, 71 | 69, 3, 69, 3, 481, 2, 70, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 72 | 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 2, 33, 2, 35, 73 | 2, 37, 2, 39, 2, 41, 2, 43, 2, 45, 2, 47, 2, 49, 2, 51, 2, 53, 2, 55, 2, 74 | 57, 2, 59, 2, 61, 2, 63, 2, 65, 2, 67, 2, 69, 2, 71, 2, 73, 2, 75, 2, 77, 75 | 2, 79, 2, 81, 2, 83, 2, 85, 17, 87, 2, 89, 2, 91, 2, 93, 2, 95, 2, 97, 76 | 2, 99, 2, 101, 2, 103, 2, 105, 2, 107, 18, 109, 19, 111, 2, 113, 20, 115, 77 | 2, 117, 2, 119, 2, 121, 2, 123, 2, 125, 2, 127, 21, 129, 2, 131, 2, 133, 78 | 22, 135, 23, 137, 24, 3, 2, 24, 4, 2, 78, 78, 110, 110, 3, 2, 51, 59, 4, 79 | 2, 90, 90, 122, 122, 5, 2, 50, 59, 67, 72, 99, 104, 3, 2, 50, 57, 4, 2, 80 | 68, 68, 100, 100, 3, 2, 50, 51, 4, 2, 71, 71, 103, 103, 4, 2, 45, 45, 47, 81 | 47, 6, 2, 70, 70, 72, 72, 102, 102, 104, 104, 4, 2, 82, 82, 114, 114, 6, 82 | 2, 12, 12, 15, 15, 41, 41, 94, 94, 6, 2, 12, 12, 15, 15, 36, 36, 94, 94, 83 | 10, 2, 36, 36, 41, 41, 94, 94, 100, 100, 104, 104, 112, 112, 116, 116, 84 | 118, 118, 3, 2, 50, 53, 6, 2, 38, 38, 67, 92, 97, 97, 99, 124, 4, 2, 2, 85 | 129, 55298, 56321, 3, 2, 55298, 56321, 3, 2, 56322, 57345, 7, 2, 38, 38, 86 | 50, 59, 67, 92, 97, 97, 99, 124, 5, 2, 11, 12, 14, 15, 34, 34, 4, 2, 12, 87 | 12, 15, 15, 2, 515, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 88 | 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 89 | 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 90 | 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 85, 91 | 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 92 | 2, 127, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, 2, 137, 3, 93 | 2, 2, 2, 3, 139, 3, 2, 2, 2, 5, 141, 3, 2, 2, 2, 7, 143, 3, 2, 2, 2, 9, 94 | 145, 3, 2, 2, 2, 11, 147, 3, 2, 2, 2, 13, 149, 3, 2, 2, 2, 15, 151, 3, 95 | 2, 2, 2, 17, 153, 3, 2, 2, 2, 19, 155, 3, 2, 2, 2, 21, 157, 3, 2, 2, 2, 96 | 23, 162, 3, 2, 2, 2, 25, 167, 3, 2, 2, 2, 27, 173, 3, 2, 2, 2, 29, 184, 97 | 3, 2, 2, 2, 31, 186, 3, 2, 2, 2, 33, 190, 3, 2, 2, 2, 35, 194, 3, 2, 2, 98 | 2, 37, 198, 3, 2, 2, 2, 39, 202, 3, 2, 2, 2, 41, 214, 3, 2, 2, 2, 43, 216, 99 | 3, 2, 2, 2, 45, 225, 3, 2, 2, 2, 47, 227, 3, 2, 2, 2, 49, 230, 3, 2, 2, 100 | 2, 51, 236, 3, 2, 2, 2, 53, 239, 3, 2, 2, 2, 55, 243, 3, 2, 2, 2, 57, 247, 101 | 3, 2, 2, 2, 59, 254, 3, 2, 2, 2, 61, 257, 3, 2, 2, 2, 63, 263, 3, 2, 2, 102 | 2, 65, 265, 3, 2, 2, 2, 67, 271, 3, 2, 2, 2, 69, 278, 3, 2, 2, 2, 71, 281, 103 | 3, 2, 2, 2, 73, 287, 3, 2, 2, 2, 75, 289, 3, 2, 2, 2, 77, 293, 3, 2, 2, 104 | 2, 79, 300, 3, 2, 2, 2, 81, 303, 3, 2, 2, 2, 83, 309, 3, 2, 2, 2, 85, 313, 105 | 3, 2, 2, 2, 87, 342, 3, 2, 2, 2, 89, 344, 3, 2, 2, 2, 91, 347, 3, 2, 2, 106 | 2, 93, 350, 3, 2, 2, 2, 95, 354, 3, 2, 2, 2, 97, 356, 3, 2, 2, 2, 99, 358, 107 | 3, 2, 2, 2, 101, 374, 3, 2, 2, 2, 103, 376, 3, 2, 2, 2, 105, 379, 3, 2, 108 | 2, 2, 107, 390, 3, 2, 2, 2, 109, 400, 3, 2, 2, 2, 111, 402, 3, 2, 2, 2, 109 | 113, 404, 3, 2, 2, 2, 115, 411, 3, 2, 2, 2, 117, 417, 3, 2, 2, 2, 119, 110 | 423, 3, 2, 2, 2, 121, 436, 3, 2, 2, 2, 123, 438, 3, 2, 2, 2, 125, 440, 111 | 3, 2, 2, 2, 127, 451, 3, 2, 2, 2, 129, 460, 3, 2, 2, 2, 131, 466, 3, 2, 112 | 2, 2, 133, 469, 3, 2, 2, 2, 135, 475, 3, 2, 2, 2, 137, 489, 3, 2, 2, 2, 113 | 139, 140, 7, 42, 2, 2, 140, 4, 3, 2, 2, 2, 141, 142, 7, 43, 2, 2, 142, 114 | 6, 3, 2, 2, 2, 143, 144, 7, 125, 2, 2, 144, 8, 3, 2, 2, 2, 145, 146, 7, 115 | 127, 2, 2, 146, 10, 3, 2, 2, 2, 147, 148, 7, 93, 2, 2, 148, 12, 3, 2, 2, 116 | 2, 149, 150, 7, 95, 2, 2, 150, 14, 3, 2, 2, 2, 151, 152, 7, 61, 2, 2, 152, 117 | 16, 3, 2, 2, 2, 153, 154, 7, 46, 2, 2, 154, 18, 3, 2, 2, 2, 155, 156, 7, 118 | 48, 2, 2, 156, 20, 3, 2, 2, 2, 157, 158, 7, 68, 2, 2, 158, 159, 7, 113, 119 | 2, 2, 159, 160, 7, 113, 2, 2, 160, 161, 7, 109, 2, 2, 161, 22, 3, 2, 2, 120 | 2, 162, 163, 7, 80, 2, 2, 163, 164, 7, 113, 2, 2, 164, 165, 7, 118, 2, 121 | 2, 165, 166, 7, 103, 2, 2, 166, 24, 3, 2, 2, 2, 167, 168, 7, 82, 2, 2, 122 | 168, 169, 7, 99, 2, 2, 169, 170, 7, 114, 2, 2, 170, 171, 7, 103, 2, 2, 123 | 171, 172, 7, 116, 2, 2, 172, 26, 3, 2, 2, 2, 173, 177, 5, 129, 65, 2, 174, 124 | 176, 5, 131, 66, 2, 175, 174, 3, 2, 2, 2, 176, 179, 3, 2, 2, 2, 177, 175, 125 | 3, 2, 2, 2, 177, 178, 3, 2, 2, 2, 178, 28, 3, 2, 2, 2, 179, 177, 3, 2, 126 | 2, 2, 180, 185, 5, 31, 16, 2, 181, 185, 5, 33, 17, 2, 182, 185, 5, 35, 127 | 18, 2, 183, 185, 5, 37, 19, 2, 184, 180, 3, 2, 2, 2, 184, 181, 3, 2, 2, 128 | 2, 184, 182, 3, 2, 2, 2, 184, 183, 3, 2, 2, 2, 185, 30, 3, 2, 2, 2, 186, 129 | 188, 5, 41, 21, 2, 187, 189, 5, 39, 20, 2, 188, 187, 3, 2, 2, 2, 188, 189, 130 | 3, 2, 2, 2, 189, 32, 3, 2, 2, 2, 190, 192, 5, 55, 28, 2, 191, 193, 5, 39, 131 | 20, 2, 192, 191, 3, 2, 2, 2, 192, 193, 3, 2, 2, 2, 193, 34, 3, 2, 2, 2, 132 | 194, 196, 5, 65, 33, 2, 195, 197, 5, 39, 20, 2, 196, 195, 3, 2, 2, 2, 196, 133 | 197, 3, 2, 2, 2, 197, 36, 3, 2, 2, 2, 198, 200, 5, 75, 38, 2, 199, 201, 134 | 5, 39, 20, 2, 200, 199, 3, 2, 2, 2, 200, 201, 3, 2, 2, 2, 201, 38, 3, 2, 135 | 2, 2, 202, 203, 9, 2, 2, 2, 203, 40, 3, 2, 2, 2, 204, 215, 7, 50, 2, 2, 136 | 205, 212, 5, 47, 24, 2, 206, 208, 5, 43, 22, 2, 207, 206, 3, 2, 2, 2, 207, 137 | 208, 3, 2, 2, 2, 208, 213, 3, 2, 2, 2, 209, 210, 5, 53, 27, 2, 210, 211, 138 | 5, 43, 22, 2, 211, 213, 3, 2, 2, 2, 212, 207, 3, 2, 2, 2, 212, 209, 3, 139 | 2, 2, 2, 213, 215, 3, 2, 2, 2, 214, 204, 3, 2, 2, 2, 214, 205, 3, 2, 2, 140 | 2, 215, 42, 3, 2, 2, 2, 216, 221, 5, 45, 23, 2, 217, 219, 5, 49, 25, 2, 141 | 218, 217, 3, 2, 2, 2, 218, 219, 3, 2, 2, 2, 219, 220, 3, 2, 2, 2, 220, 142 | 222, 5, 45, 23, 2, 221, 218, 3, 2, 2, 2, 221, 222, 3, 2, 2, 2, 222, 44, 143 | 3, 2, 2, 2, 223, 226, 7, 50, 2, 2, 224, 226, 5, 47, 24, 2, 225, 223, 3, 144 | 2, 2, 2, 225, 224, 3, 2, 2, 2, 226, 46, 3, 2, 2, 2, 227, 228, 9, 3, 2, 145 | 2, 228, 48, 3, 2, 2, 2, 229, 231, 5, 51, 26, 2, 230, 229, 3, 2, 2, 2, 231, 146 | 232, 3, 2, 2, 2, 232, 230, 3, 2, 2, 2, 232, 233, 3, 2, 2, 2, 233, 50, 3, 147 | 2, 2, 2, 234, 237, 5, 45, 23, 2, 235, 237, 7, 97, 2, 2, 236, 234, 3, 2, 148 | 2, 2, 236, 235, 3, 2, 2, 2, 237, 52, 3, 2, 2, 2, 238, 240, 7, 97, 2, 2, 149 | 239, 238, 3, 2, 2, 2, 240, 241, 3, 2, 2, 2, 241, 239, 3, 2, 2, 2, 241, 150 | 242, 3, 2, 2, 2, 242, 54, 3, 2, 2, 2, 243, 244, 7, 50, 2, 2, 244, 245, 151 | 9, 4, 2, 2, 245, 246, 5, 57, 29, 2, 246, 56, 3, 2, 2, 2, 247, 252, 5, 59, 152 | 30, 2, 248, 250, 5, 61, 31, 2, 249, 248, 3, 2, 2, 2, 249, 250, 3, 2, 2, 153 | 2, 250, 251, 3, 2, 2, 2, 251, 253, 5, 59, 30, 2, 252, 249, 3, 2, 2, 2, 154 | 252, 253, 3, 2, 2, 2, 253, 58, 3, 2, 2, 2, 254, 255, 9, 5, 2, 2, 255, 60, 155 | 3, 2, 2, 2, 256, 258, 5, 63, 32, 2, 257, 256, 3, 2, 2, 2, 258, 259, 3, 156 | 2, 2, 2, 259, 257, 3, 2, 2, 2, 259, 260, 3, 2, 2, 2, 260, 62, 3, 2, 2, 157 | 2, 261, 264, 5, 59, 30, 2, 262, 264, 7, 97, 2, 2, 263, 261, 3, 2, 2, 2, 158 | 263, 262, 3, 2, 2, 2, 264, 64, 3, 2, 2, 2, 265, 267, 7, 50, 2, 2, 266, 159 | 268, 5, 53, 27, 2, 267, 266, 3, 2, 2, 2, 267, 268, 3, 2, 2, 2, 268, 269, 160 | 3, 2, 2, 2, 269, 270, 5, 67, 34, 2, 270, 66, 3, 2, 2, 2, 271, 276, 5, 69, 161 | 35, 2, 272, 274, 5, 71, 36, 2, 273, 272, 3, 2, 2, 2, 273, 274, 3, 2, 2, 162 | 2, 274, 275, 3, 2, 2, 2, 275, 277, 5, 69, 35, 2, 276, 273, 3, 2, 2, 2, 163 | 276, 277, 3, 2, 2, 2, 277, 68, 3, 2, 2, 2, 278, 279, 9, 6, 2, 2, 279, 70, 164 | 3, 2, 2, 2, 280, 282, 5, 73, 37, 2, 281, 280, 3, 2, 2, 2, 282, 283, 3, 165 | 2, 2, 2, 283, 281, 3, 2, 2, 2, 283, 284, 3, 2, 2, 2, 284, 72, 3, 2, 2, 166 | 2, 285, 288, 5, 69, 35, 2, 286, 288, 7, 97, 2, 2, 287, 285, 3, 2, 2, 2, 167 | 287, 286, 3, 2, 2, 2, 288, 74, 3, 2, 2, 2, 289, 290, 7, 50, 2, 2, 290, 168 | 291, 9, 7, 2, 2, 291, 292, 5, 77, 39, 2, 292, 76, 3, 2, 2, 2, 293, 298, 169 | 5, 79, 40, 2, 294, 296, 5, 81, 41, 2, 295, 294, 3, 2, 2, 2, 295, 296, 3, 170 | 2, 2, 2, 296, 297, 3, 2, 2, 2, 297, 299, 5, 79, 40, 2, 298, 295, 3, 2, 171 | 2, 2, 298, 299, 3, 2, 2, 2, 299, 78, 3, 2, 2, 2, 300, 301, 9, 8, 2, 2, 172 | 301, 80, 3, 2, 2, 2, 302, 304, 5, 83, 42, 2, 303, 302, 3, 2, 2, 2, 304, 173 | 305, 3, 2, 2, 2, 305, 303, 3, 2, 2, 2, 305, 306, 3, 2, 2, 2, 306, 82, 3, 174 | 2, 2, 2, 307, 310, 5, 79, 40, 2, 308, 310, 7, 97, 2, 2, 309, 307, 3, 2, 175 | 2, 2, 309, 308, 3, 2, 2, 2, 310, 84, 3, 2, 2, 2, 311, 314, 5, 87, 44, 2, 176 | 312, 314, 5, 99, 50, 2, 313, 311, 3, 2, 2, 2, 313, 312, 3, 2, 2, 2, 314, 177 | 86, 3, 2, 2, 2, 315, 316, 5, 43, 22, 2, 316, 318, 7, 48, 2, 2, 317, 319, 178 | 5, 43, 22, 2, 318, 317, 3, 2, 2, 2, 318, 319, 3, 2, 2, 2, 319, 321, 3, 179 | 2, 2, 2, 320, 322, 5, 89, 45, 2, 321, 320, 3, 2, 2, 2, 321, 322, 3, 2, 180 | 2, 2, 322, 324, 3, 2, 2, 2, 323, 325, 5, 97, 49, 2, 324, 323, 3, 2, 2, 181 | 2, 324, 325, 3, 2, 2, 2, 325, 343, 3, 2, 2, 2, 326, 327, 7, 48, 2, 2, 327, 182 | 329, 5, 43, 22, 2, 328, 330, 5, 89, 45, 2, 329, 328, 3, 2, 2, 2, 329, 330, 183 | 3, 2, 2, 2, 330, 332, 3, 2, 2, 2, 331, 333, 5, 97, 49, 2, 332, 331, 3, 184 | 2, 2, 2, 332, 333, 3, 2, 2, 2, 333, 343, 3, 2, 2, 2, 334, 335, 5, 43, 22, 185 | 2, 335, 337, 5, 89, 45, 2, 336, 338, 5, 97, 49, 2, 337, 336, 3, 2, 2, 2, 186 | 337, 338, 3, 2, 2, 2, 338, 343, 3, 2, 2, 2, 339, 340, 5, 43, 22, 2, 340, 187 | 341, 5, 97, 49, 2, 341, 343, 3, 2, 2, 2, 342, 315, 3, 2, 2, 2, 342, 326, 188 | 3, 2, 2, 2, 342, 334, 3, 2, 2, 2, 342, 339, 3, 2, 2, 2, 343, 88, 3, 2, 189 | 2, 2, 344, 345, 5, 91, 46, 2, 345, 346, 5, 93, 47, 2, 346, 90, 3, 2, 2, 190 | 2, 347, 348, 9, 9, 2, 2, 348, 92, 3, 2, 2, 2, 349, 351, 5, 95, 48, 2, 350, 191 | 349, 3, 2, 2, 2, 350, 351, 3, 2, 2, 2, 351, 352, 3, 2, 2, 2, 352, 353, 192 | 5, 43, 22, 2, 353, 94, 3, 2, 2, 2, 354, 355, 9, 10, 2, 2, 355, 96, 3, 2, 193 | 2, 2, 356, 357, 9, 11, 2, 2, 357, 98, 3, 2, 2, 2, 358, 359, 5, 101, 51, 194 | 2, 359, 361, 5, 103, 52, 2, 360, 362, 5, 97, 49, 2, 361, 360, 3, 2, 2, 195 | 2, 361, 362, 3, 2, 2, 2, 362, 100, 3, 2, 2, 2, 363, 365, 5, 55, 28, 2, 196 | 364, 366, 7, 48, 2, 2, 365, 364, 3, 2, 2, 2, 365, 366, 3, 2, 2, 2, 366, 197 | 375, 3, 2, 2, 2, 367, 368, 7, 50, 2, 2, 368, 370, 9, 4, 2, 2, 369, 371, 198 | 5, 57, 29, 2, 370, 369, 3, 2, 2, 2, 370, 371, 3, 2, 2, 2, 371, 372, 3, 199 | 2, 2, 2, 372, 373, 7, 48, 2, 2, 373, 375, 5, 57, 29, 2, 374, 363, 3, 2, 200 | 2, 2, 374, 367, 3, 2, 2, 2, 375, 102, 3, 2, 2, 2, 376, 377, 5, 105, 53, 201 | 2, 377, 378, 5, 93, 47, 2, 378, 104, 3, 2, 2, 2, 379, 380, 9, 12, 2, 2, 202 | 380, 106, 3, 2, 2, 2, 381, 382, 7, 118, 2, 2, 382, 383, 7, 116, 2, 2, 383, 203 | 384, 7, 119, 2, 2, 384, 391, 7, 103, 2, 2, 385, 386, 7, 104, 2, 2, 386, 204 | 387, 7, 99, 2, 2, 387, 388, 7, 110, 2, 2, 388, 389, 7, 117, 2, 2, 389, 205 | 391, 7, 103, 2, 2, 390, 381, 3, 2, 2, 2, 390, 385, 3, 2, 2, 2, 391, 108, 206 | 3, 2, 2, 2, 392, 393, 7, 41, 2, 2, 393, 394, 5, 111, 56, 2, 394, 395, 7, 207 | 41, 2, 2, 395, 401, 3, 2, 2, 2, 396, 397, 7, 41, 2, 2, 397, 398, 5, 119, 208 | 60, 2, 398, 399, 7, 41, 2, 2, 399, 401, 3, 2, 2, 2, 400, 392, 3, 2, 2, 209 | 2, 400, 396, 3, 2, 2, 2, 401, 110, 3, 2, 2, 2, 402, 403, 10, 13, 2, 2, 210 | 403, 112, 3, 2, 2, 2, 404, 406, 7, 36, 2, 2, 405, 407, 5, 115, 58, 2, 406, 211 | 405, 3, 2, 2, 2, 406, 407, 3, 2, 2, 2, 407, 408, 3, 2, 2, 2, 408, 409, 212 | 7, 36, 2, 2, 409, 114, 3, 2, 2, 2, 410, 412, 5, 117, 59, 2, 411, 410, 3, 213 | 2, 2, 2, 412, 413, 3, 2, 2, 2, 413, 411, 3, 2, 2, 2, 413, 414, 3, 2, 2, 214 | 2, 414, 116, 3, 2, 2, 2, 415, 418, 10, 14, 2, 2, 416, 418, 5, 119, 60, 215 | 2, 417, 415, 3, 2, 2, 2, 417, 416, 3, 2, 2, 2, 418, 118, 3, 2, 2, 2, 419, 216 | 420, 7, 94, 2, 2, 420, 424, 9, 15, 2, 2, 421, 424, 5, 121, 61, 2, 422, 217 | 424, 5, 125, 63, 2, 423, 419, 3, 2, 2, 2, 423, 421, 3, 2, 2, 2, 423, 422, 218 | 3, 2, 2, 2, 424, 120, 3, 2, 2, 2, 425, 426, 7, 94, 2, 2, 426, 437, 5, 69, 219 | 35, 2, 427, 428, 7, 94, 2, 2, 428, 429, 5, 69, 35, 2, 429, 430, 5, 69, 220 | 35, 2, 430, 437, 3, 2, 2, 2, 431, 432, 7, 94, 2, 2, 432, 433, 5, 123, 62, 221 | 2, 433, 434, 5, 69, 35, 2, 434, 435, 5, 69, 35, 2, 435, 437, 3, 2, 2, 2, 222 | 436, 425, 3, 2, 2, 2, 436, 427, 3, 2, 2, 2, 436, 431, 3, 2, 2, 2, 437, 223 | 122, 3, 2, 2, 2, 438, 439, 9, 16, 2, 2, 439, 124, 3, 2, 2, 2, 440, 442, 224 | 7, 94, 2, 2, 441, 443, 7, 119, 2, 2, 442, 441, 3, 2, 2, 2, 443, 444, 3, 225 | 2, 2, 2, 444, 442, 3, 2, 2, 2, 444, 445, 3, 2, 2, 2, 445, 446, 3, 2, 2, 226 | 2, 446, 447, 5, 59, 30, 2, 447, 448, 5, 59, 30, 2, 448, 449, 5, 59, 30, 227 | 2, 449, 450, 5, 59, 30, 2, 450, 126, 3, 2, 2, 2, 451, 452, 7, 112, 2, 2, 228 | 452, 453, 7, 119, 2, 2, 453, 454, 7, 110, 2, 2, 454, 455, 7, 110, 2, 2, 229 | 455, 128, 3, 2, 2, 2, 456, 461, 9, 17, 2, 2, 457, 461, 10, 18, 2, 2, 458, 230 | 459, 9, 19, 2, 2, 459, 461, 9, 20, 2, 2, 460, 456, 3, 2, 2, 2, 460, 457, 231 | 3, 2, 2, 2, 460, 458, 3, 2, 2, 2, 461, 130, 3, 2, 2, 2, 462, 467, 9, 21, 232 | 2, 2, 463, 467, 10, 18, 2, 2, 464, 465, 9, 19, 2, 2, 465, 467, 9, 20, 2, 233 | 2, 466, 462, 3, 2, 2, 2, 466, 463, 3, 2, 2, 2, 466, 464, 3, 2, 2, 2, 467, 234 | 132, 3, 2, 2, 2, 468, 470, 9, 22, 2, 2, 469, 468, 3, 2, 2, 2, 470, 471, 235 | 3, 2, 2, 2, 471, 469, 3, 2, 2, 2, 471, 472, 3, 2, 2, 2, 472, 473, 3, 2, 236 | 2, 2, 473, 474, 8, 67, 2, 2, 474, 134, 3, 2, 2, 2, 475, 476, 7, 49, 2, 237 | 2, 476, 477, 7, 44, 2, 2, 477, 481, 3, 2, 2, 2, 478, 480, 11, 2, 2, 2, 238 | 479, 478, 3, 2, 2, 2, 480, 483, 3, 2, 2, 2, 481, 482, 3, 2, 2, 2, 481, 239 | 479, 3, 2, 2, 2, 482, 484, 3, 2, 2, 2, 483, 481, 3, 2, 2, 2, 484, 485, 240 | 7, 44, 2, 2, 485, 486, 7, 49, 2, 2, 486, 487, 3, 2, 2, 2, 487, 488, 8, 241 | 68, 3, 2, 488, 136, 3, 2, 2, 2, 489, 490, 7, 49, 2, 2, 490, 491, 7, 49, 242 | 2, 2, 491, 495, 3, 2, 2, 2, 492, 494, 10, 23, 2, 2, 493, 492, 3, 2, 2, 243 | 2, 494, 497, 3, 2, 2, 2, 495, 493, 3, 2, 2, 2, 495, 496, 3, 2, 2, 2, 496, 244 | 498, 3, 2, 2, 2, 497, 495, 3, 2, 2, 2, 498, 499, 8, 69, 3, 2, 499, 138, 245 | 3, 2, 2, 2, 57, 2, 177, 184, 188, 192, 196, 200, 207, 212, 214, 218, 221, 246 | 225, 232, 236, 241, 249, 252, 259, 263, 267, 273, 276, 283, 287, 295, 298, 247 | 305, 309, 313, 318, 321, 324, 329, 332, 337, 342, 350, 361, 365, 370, 374, 248 | 390, 400, 406, 413, 417, 423, 436, 444, 460, 466, 471, 481, 495, 4, 8, 249 | 2, 2, 2, 3, 2, 250 | } 251 | 252 | var lexerChannelNames = []string{ 253 | "DEFAULT_TOKEN_CHANNEL", "HIDDEN", 254 | } 255 | 256 | var lexerModeNames = []string{ 257 | "DEFAULT_MODE", 258 | } 259 | 260 | var lexerLiteralNames = []string{ 261 | "", "'('", "')'", "'{'", "'}'", "'['", "']'", "';'", "','", "'.'", "'Book'", 262 | "'Note'", "'Paper'", "", "", "", "", "", "", "'null'", 263 | } 264 | 265 | var lexerSymbolicNames = []string{ 266 | "", "LPAREN", "RPAREN", "LBRACE", "RBRACE", "LBRACK", "RBRACK", "SEMI", 267 | "COMMA", "DOT", "Book", "Note", "Paser", "Identifier", "IntegerLiteral", 268 | "FloatingPointLiteral", "BooleanLiteral", "CharacterLiteral", "StringLiteral", 269 | "NullLiteral", "WS", "COMMENT", "LINE_COMMENT", 270 | } 271 | 272 | var lexerRuleNames = []string{ 273 | "LPAREN", "RPAREN", "LBRACE", "RBRACE", "LBRACK", "RBRACK", "SEMI", "COMMA", 274 | "DOT", "Book", "Note", "Paser", "Identifier", "IntegerLiteral", "DecimalIntegerLiteral", 275 | "HexIntegerLiteral", "OctalIntegerLiteral", "BinaryIntegerLiteral", "IntegerTypeSuffix", 276 | "DecimalNumeral", "Digits", "Digit", "NonZeroDigit", "DigitsAndUnderscores", 277 | "DigitOrUnderscore", "Underscores", "HexNumeral", "HexDigits", "HexDigit", 278 | "HexDigitsAndUnderscores", "HexDigitOrUnderscore", "OctalNumeral", "OctalDigits", 279 | "OctalDigit", "OctalDigitsAndUnderscores", "OctalDigitOrUnderscore", "BinaryNumeral", 280 | "BinaryDigits", "BinaryDigit", "BinaryDigitsAndUnderscores", "BinaryDigitOrUnderscore", 281 | "FloatingPointLiteral", "DecimalFloatingPointLiteral", "ExponentPart", 282 | "ExponentIndicator", "SignedInteger", "Sign", "FloatTypeSuffix", "HexadecimalFloatingPointLiteral", 283 | "HexSignificand", "BinaryExponent", "BinaryExponentIndicator", "BooleanLiteral", 284 | "CharacterLiteral", "SingleCharacter", "StringLiteral", "StringCharacters", 285 | "StringCharacter", "EscapeSequence", "OctalEscape", "ZeroToThree", "UnicodeEscape", 286 | "NullLiteral", "JavaLetter", "JavaLetterOrDigit", "WS", "COMMENT", "LINE_COMMENT", 287 | } 288 | 289 | type ComposeLexer struct { 290 | *antlr.BaseLexer 291 | channelNames []string 292 | modeNames []string 293 | // TODO: EOF string 294 | } 295 | 296 | // NewComposeLexer produces a new lexer instance for the optional input antlr.CharStream. 297 | // 298 | // The *ComposeLexer instance produced may be reused by calling the SetInputStream method. 299 | // The initial lexer configuration is expensive to construct, and the object is not thread-safe; 300 | // however, if used within a Golang sync.Pool, the construction cost amortizes well and the 301 | // objects can be used in a thread-safe manner. 302 | func NewComposeLexer(input antlr.CharStream) *ComposeLexer { 303 | l := new(ComposeLexer) 304 | lexerDeserializer := antlr.NewATNDeserializer(nil) 305 | lexerAtn := lexerDeserializer.DeserializeFromUInt16(serializedLexerAtn) 306 | lexerDecisionToDFA := make([]*antlr.DFA, len(lexerAtn.DecisionToState)) 307 | for index, ds := range lexerAtn.DecisionToState { 308 | lexerDecisionToDFA[index] = antlr.NewDFA(ds, index) 309 | } 310 | l.BaseLexer = antlr.NewBaseLexer(input) 311 | l.Interpreter = antlr.NewLexerATNSimulator(l, lexerAtn, lexerDecisionToDFA, antlr.NewPredictionContextCache()) 312 | 313 | l.channelNames = lexerChannelNames 314 | l.modeNames = lexerModeNames 315 | l.RuleNames = lexerRuleNames 316 | l.LiteralNames = lexerLiteralNames 317 | l.SymbolicNames = lexerSymbolicNames 318 | l.GrammarFileName = "ComposeLexer.g4" 319 | // TODO: l.EOF = antlr.TokenEOF 320 | 321 | return l 322 | } 323 | 324 | // ComposeLexer tokens. 325 | const ( 326 | ComposeLexerLPAREN = 1 327 | ComposeLexerRPAREN = 2 328 | ComposeLexerLBRACE = 3 329 | ComposeLexerRBRACE = 4 330 | ComposeLexerLBRACK = 5 331 | ComposeLexerRBRACK = 6 332 | ComposeLexerSEMI = 7 333 | ComposeLexerCOMMA = 8 334 | ComposeLexerDOT = 9 335 | ComposeLexerBook = 10 336 | ComposeLexerNote = 11 337 | ComposeLexerPaser = 12 338 | ComposeLexerIdentifier = 13 339 | ComposeLexerIntegerLiteral = 14 340 | ComposeLexerFloatingPointLiteral = 15 341 | ComposeLexerBooleanLiteral = 16 342 | ComposeLexerCharacterLiteral = 17 343 | ComposeLexerStringLiteral = 18 344 | ComposeLexerNullLiteral = 19 345 | ComposeLexerWS = 20 346 | ComposeLexerCOMMENT = 21 347 | ComposeLexerLINE_COMMENT = 22 348 | ) 349 | -------------------------------------------------------------------------------- /producer/js/grammar/ComposeParser.ts: -------------------------------------------------------------------------------- 1 | // Generated from ../../grammar/ComposeParser.g4 by ANTLR 4.9.0-SNAPSHOT 2 | 3 | 4 | import { ATN } from "antlr4ts/atn/ATN"; 5 | import { ATNDeserializer } from "antlr4ts/atn/ATNDeserializer"; 6 | import { FailedPredicateException } from "antlr4ts/FailedPredicateException"; 7 | import { NotNull } from "antlr4ts/Decorators"; 8 | import { NoViableAltException } from "antlr4ts/NoViableAltException"; 9 | import { Override } from "antlr4ts/Decorators"; 10 | import { Parser } from "antlr4ts/Parser"; 11 | import { ParserRuleContext } from "antlr4ts/ParserRuleContext"; 12 | import { ParserATNSimulator } from "antlr4ts/atn/ParserATNSimulator"; 13 | import { ParseTreeListener } from "antlr4ts/tree/ParseTreeListener"; 14 | import { ParseTreeVisitor } from "antlr4ts/tree/ParseTreeVisitor"; 15 | import { RecognitionException } from "antlr4ts/RecognitionException"; 16 | import { RuleContext } from "antlr4ts/RuleContext"; 17 | //import { RuleVersion } from "antlr4ts/RuleVersion"; 18 | import { TerminalNode } from "antlr4ts/tree/TerminalNode"; 19 | import { Token } from "antlr4ts/Token"; 20 | import { TokenStream } from "antlr4ts/TokenStream"; 21 | import { Vocabulary } from "antlr4ts/Vocabulary"; 22 | import { VocabularyImpl } from "antlr4ts/VocabularyImpl"; 23 | 24 | import * as Utils from "antlr4ts/misc/Utils"; 25 | 26 | import { ComposeParserListener } from "./ComposeParserListener"; 27 | import { ComposeParserVisitor } from "./ComposeParserVisitor"; 28 | 29 | 30 | export class ComposeParser extends Parser { 31 | public static readonly LPAREN = 1; 32 | public static readonly RPAREN = 2; 33 | public static readonly LBRACE = 3; 34 | public static readonly RBRACE = 4; 35 | public static readonly LBRACK = 5; 36 | public static readonly RBRACK = 6; 37 | public static readonly SEMI = 7; 38 | public static readonly COMMA = 8; 39 | public static readonly DOT = 9; 40 | public static readonly Book = 10; 41 | public static readonly Note = 11; 42 | public static readonly Paser = 12; 43 | public static readonly Identifier = 13; 44 | public static readonly IntegerLiteral = 14; 45 | public static readonly FloatingPointLiteral = 15; 46 | public static readonly BooleanLiteral = 16; 47 | public static readonly CharacterLiteral = 17; 48 | public static readonly StringLiteral = 18; 49 | public static readonly NullLiteral = 19; 50 | public static readonly WS = 20; 51 | public static readonly COMMENT = 21; 52 | public static readonly LINE_COMMENT = 22; 53 | public static readonly RULE_compilationUnit = 0; 54 | public static readonly RULE_entityDecl = 1; 55 | public static readonly RULE_entityModifier = 2; 56 | public static readonly RULE_entityCall = 3; 57 | public static readonly RULE_parameterList = 4; 58 | public static readonly RULE_literal = 5; 59 | public static readonly RULE_identifier = 6; 60 | // tslint:disable:no-trailing-whitespace 61 | public static readonly ruleNames: string[] = [ 62 | "compilationUnit", "entityDecl", "entityModifier", "entityCall", "parameterList", 63 | "literal", "identifier", 64 | ]; 65 | 66 | private static readonly _LITERAL_NAMES: Array = [ 67 | undefined, "'('", "')'", "'{'", "'}'", "'['", "']'", "';'", "','", "'.'", 68 | "'Book'", "'Note'", "'Paper'", undefined, undefined, undefined, undefined, 69 | undefined, undefined, "'null'", 70 | ]; 71 | private static readonly _SYMBOLIC_NAMES: Array = [ 72 | undefined, "LPAREN", "RPAREN", "LBRACE", "RBRACE", "LBRACK", "RBRACK", 73 | "SEMI", "COMMA", "DOT", "Book", "Note", "Paser", "Identifier", "IntegerLiteral", 74 | "FloatingPointLiteral", "BooleanLiteral", "CharacterLiteral", "StringLiteral", 75 | "NullLiteral", "WS", "COMMENT", "LINE_COMMENT", 76 | ]; 77 | public static readonly VOCABULARY: Vocabulary = new VocabularyImpl(ComposeParser._LITERAL_NAMES, ComposeParser._SYMBOLIC_NAMES, []); 78 | 79 | // @Override 80 | // @NotNull 81 | public get vocabulary(): Vocabulary { 82 | return ComposeParser.VOCABULARY; 83 | } 84 | // tslint:enable:no-trailing-whitespace 85 | 86 | // @Override 87 | public get grammarFileName(): string { return "ComposeParser.g4"; } 88 | 89 | // @Override 90 | public get ruleNames(): string[] { return ComposeParser.ruleNames; } 91 | 92 | // @Override 93 | public get serializedATN(): string { return ComposeParser._serializedATN; } 94 | 95 | protected createFailedPredicateException(predicate?: string, message?: string): FailedPredicateException { 96 | return new FailedPredicateException(this, predicate, message); 97 | } 98 | 99 | constructor(input: TokenStream) { 100 | super(input); 101 | this._interp = new ParserATNSimulator(ComposeParser._ATN, this); 102 | } 103 | // @RuleVersion(0) 104 | public compilationUnit(): CompilationUnitContext { 105 | let _localctx: CompilationUnitContext = new CompilationUnitContext(this._ctx, this.state); 106 | this.enterRule(_localctx, 0, ComposeParser.RULE_compilationUnit); 107 | let _la: number; 108 | try { 109 | this.enterOuterAlt(_localctx, 1); 110 | { 111 | this.state = 15; 112 | this._errHandler.sync(this); 113 | _la = this._input.LA(1); 114 | if (_la === ComposeParser.StringLiteral) { 115 | { 116 | this.state = 14; 117 | this.entityDecl(); 118 | } 119 | } 120 | 121 | } 122 | } 123 | catch (re) { 124 | if (re instanceof RecognitionException) { 125 | _localctx.exception = re; 126 | this._errHandler.reportError(this, re); 127 | this._errHandler.recover(this, re); 128 | } else { 129 | throw re; 130 | } 131 | } 132 | finally { 133 | this.exitRule(); 134 | } 135 | return _localctx; 136 | } 137 | // @RuleVersion(0) 138 | public entityDecl(): EntityDeclContext { 139 | let _localctx: EntityDeclContext = new EntityDeclContext(this._ctx, this.state); 140 | this.enterRule(_localctx, 2, ComposeParser.RULE_entityDecl); 141 | let _la: number; 142 | try { 143 | this.enterOuterAlt(_localctx, 1); 144 | { 145 | this.state = 17; 146 | this.entityModifier(); 147 | this.state = 22; 148 | this._errHandler.sync(this); 149 | _la = this._input.LA(1); 150 | while (_la === ComposeParser.DOT) { 151 | { 152 | { 153 | this.state = 18; 154 | this.match(ComposeParser.DOT); 155 | this.state = 19; 156 | this.entityCall(); 157 | } 158 | } 159 | this.state = 24; 160 | this._errHandler.sync(this); 161 | _la = this._input.LA(1); 162 | } 163 | } 164 | } 165 | catch (re) { 166 | if (re instanceof RecognitionException) { 167 | _localctx.exception = re; 168 | this._errHandler.reportError(this, re); 169 | this._errHandler.recover(this, re); 170 | } else { 171 | throw re; 172 | } 173 | } 174 | finally { 175 | this.exitRule(); 176 | } 177 | return _localctx; 178 | } 179 | // @RuleVersion(0) 180 | public entityModifier(): EntityModifierContext { 181 | let _localctx: EntityModifierContext = new EntityModifierContext(this._ctx, this.state); 182 | this.enterRule(_localctx, 4, ComposeParser.RULE_entityModifier); 183 | try { 184 | this.enterOuterAlt(_localctx, 1); 185 | { 186 | this.state = 25; 187 | this.match(ComposeParser.StringLiteral); 188 | } 189 | } 190 | catch (re) { 191 | if (re instanceof RecognitionException) { 192 | _localctx.exception = re; 193 | this._errHandler.reportError(this, re); 194 | this._errHandler.recover(this, re); 195 | } else { 196 | throw re; 197 | } 198 | } 199 | finally { 200 | this.exitRule(); 201 | } 202 | return _localctx; 203 | } 204 | // @RuleVersion(0) 205 | public entityCall(): EntityCallContext { 206 | let _localctx: EntityCallContext = new EntityCallContext(this._ctx, this.state); 207 | this.enterRule(_localctx, 6, ComposeParser.RULE_entityCall); 208 | try { 209 | this.enterOuterAlt(_localctx, 1); 210 | { 211 | this.state = 27; 212 | this.identifier(); 213 | this.state = 28; 214 | this.match(ComposeParser.LPAREN); 215 | this.state = 29; 216 | this.parameterList(); 217 | this.state = 30; 218 | this.match(ComposeParser.RPAREN); 219 | } 220 | } 221 | catch (re) { 222 | if (re instanceof RecognitionException) { 223 | _localctx.exception = re; 224 | this._errHandler.reportError(this, re); 225 | this._errHandler.recover(this, re); 226 | } else { 227 | throw re; 228 | } 229 | } 230 | finally { 231 | this.exitRule(); 232 | } 233 | return _localctx; 234 | } 235 | // @RuleVersion(0) 236 | public parameterList(): ParameterListContext { 237 | let _localctx: ParameterListContext = new ParameterListContext(this._ctx, this.state); 238 | this.enterRule(_localctx, 8, ComposeParser.RULE_parameterList); 239 | let _la: number; 240 | try { 241 | this.enterOuterAlt(_localctx, 1); 242 | { 243 | this.state = 32; 244 | this.literal(); 245 | this.state = 37; 246 | this._errHandler.sync(this); 247 | _la = this._input.LA(1); 248 | while (_la === ComposeParser.COMMA) { 249 | { 250 | { 251 | this.state = 33; 252 | this.match(ComposeParser.COMMA); 253 | this.state = 34; 254 | this.literal(); 255 | } 256 | } 257 | this.state = 39; 258 | this._errHandler.sync(this); 259 | _la = this._input.LA(1); 260 | } 261 | } 262 | } 263 | catch (re) { 264 | if (re instanceof RecognitionException) { 265 | _localctx.exception = re; 266 | this._errHandler.reportError(this, re); 267 | this._errHandler.recover(this, re); 268 | } else { 269 | throw re; 270 | } 271 | } 272 | finally { 273 | this.exitRule(); 274 | } 275 | return _localctx; 276 | } 277 | // @RuleVersion(0) 278 | public literal(): LiteralContext { 279 | let _localctx: LiteralContext = new LiteralContext(this._ctx, this.state); 280 | this.enterRule(_localctx, 10, ComposeParser.RULE_literal); 281 | let _la: number; 282 | try { 283 | this.enterOuterAlt(_localctx, 1); 284 | { 285 | this.state = 40; 286 | _la = this._input.LA(1); 287 | if (!((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << ComposeParser.IntegerLiteral) | (1 << ComposeParser.FloatingPointLiteral) | (1 << ComposeParser.BooleanLiteral) | (1 << ComposeParser.CharacterLiteral) | (1 << ComposeParser.StringLiteral) | (1 << ComposeParser.NullLiteral))) !== 0))) { 288 | this._errHandler.recoverInline(this); 289 | } else { 290 | if (this._input.LA(1) === Token.EOF) { 291 | this.matchedEOF = true; 292 | } 293 | 294 | this._errHandler.reportMatch(this); 295 | this.consume(); 296 | } 297 | } 298 | } 299 | catch (re) { 300 | if (re instanceof RecognitionException) { 301 | _localctx.exception = re; 302 | this._errHandler.reportError(this, re); 303 | this._errHandler.recover(this, re); 304 | } else { 305 | throw re; 306 | } 307 | } 308 | finally { 309 | this.exitRule(); 310 | } 311 | return _localctx; 312 | } 313 | // @RuleVersion(0) 314 | public identifier(): IdentifierContext { 315 | let _localctx: IdentifierContext = new IdentifierContext(this._ctx, this.state); 316 | this.enterRule(_localctx, 12, ComposeParser.RULE_identifier); 317 | try { 318 | this.enterOuterAlt(_localctx, 1); 319 | { 320 | this.state = 42; 321 | this.match(ComposeParser.Identifier); 322 | } 323 | } 324 | catch (re) { 325 | if (re instanceof RecognitionException) { 326 | _localctx.exception = re; 327 | this._errHandler.reportError(this, re); 328 | this._errHandler.recover(this, re); 329 | } else { 330 | throw re; 331 | } 332 | } 333 | finally { 334 | this.exitRule(); 335 | } 336 | return _localctx; 337 | } 338 | 339 | public static readonly _serializedATN: string = 340 | "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x03\x18/\x04\x02" + 341 | "\t\x02\x04\x03\t\x03\x04\x04\t\x04\x04\x05\t\x05\x04\x06\t\x06\x04\x07" + 342 | "\t\x07\x04\b\t\b\x03\x02\x05\x02\x12\n\x02\x03\x03\x03\x03\x03\x03\x07" + 343 | "\x03\x17\n\x03\f\x03\x0E\x03\x1A\v\x03\x03\x04\x03\x04\x03\x05\x03\x05" + 344 | "\x03\x05\x03\x05\x03\x05\x03\x06\x03\x06\x03\x06\x07\x06&\n\x06\f\x06" + 345 | "\x0E\x06)\v\x06\x03\x07\x03\x07\x03\b\x03\b\x03\b\x02\x02\x02\t\x02\x02" + 346 | "\x04\x02\x06\x02\b\x02\n\x02\f\x02\x0E\x02\x02\x03\x03\x02\x10\x15\x02" + 347 | "*\x02\x11\x03\x02\x02\x02\x04\x13\x03\x02\x02\x02\x06\x1B\x03\x02\x02" + 348 | "\x02\b\x1D\x03\x02\x02\x02\n\"\x03\x02\x02\x02\f*\x03\x02\x02\x02\x0E" + 349 | ",\x03\x02\x02\x02\x10\x12\x05\x04\x03\x02\x11\x10\x03\x02\x02\x02\x11" + 350 | "\x12\x03\x02\x02\x02\x12\x03\x03\x02\x02\x02\x13\x18\x05\x06\x04\x02\x14" + 351 | "\x15\x07\v\x02\x02\x15\x17\x05\b\x05\x02\x16\x14\x03\x02\x02\x02\x17\x1A" + 352 | "\x03\x02\x02\x02\x18\x16\x03\x02\x02\x02\x18\x19\x03\x02\x02\x02\x19\x05" + 353 | "\x03\x02\x02\x02\x1A\x18\x03\x02\x02\x02\x1B\x1C\x07\x14\x02\x02\x1C\x07" + 354 | "\x03\x02\x02\x02\x1D\x1E\x05\x0E\b\x02\x1E\x1F\x07\x03\x02\x02\x1F \x05" + 355 | "\n\x06\x02 !\x07\x04\x02\x02!\t\x03\x02\x02\x02\"\'\x05\f\x07\x02#$\x07" + 356 | "\n\x02\x02$&\x05\f\x07\x02%#\x03\x02\x02\x02&)\x03\x02\x02\x02\'%\x03" + 357 | "\x02\x02\x02\'(\x03\x02\x02\x02(\v\x03\x02\x02\x02)\'\x03\x02\x02\x02" + 358 | "*+\t\x02\x02\x02+\r\x03\x02\x02\x02,-\x07\x0F\x02\x02-\x0F\x03\x02\x02" + 359 | "\x02\x05\x11\x18\'"; 360 | public static __ATN: ATN; 361 | public static get _ATN(): ATN { 362 | if (!ComposeParser.__ATN) { 363 | ComposeParser.__ATN = new ATNDeserializer().deserialize(Utils.toCharArray(ComposeParser._serializedATN)); 364 | } 365 | 366 | return ComposeParser.__ATN; 367 | } 368 | 369 | } 370 | 371 | export class CompilationUnitContext extends ParserRuleContext { 372 | public entityDecl(): EntityDeclContext | undefined { 373 | return this.tryGetRuleContext(0, EntityDeclContext); 374 | } 375 | constructor(parent: ParserRuleContext | undefined, invokingState: number) { 376 | super(parent, invokingState); 377 | } 378 | // @Override 379 | public get ruleIndex(): number { return ComposeParser.RULE_compilationUnit; } 380 | // @Override 381 | public enterRule(listener: ComposeParserListener): void { 382 | if (listener.enterCompilationUnit) { 383 | listener.enterCompilationUnit(this); 384 | } 385 | } 386 | // @Override 387 | public exitRule(listener: ComposeParserListener): void { 388 | if (listener.exitCompilationUnit) { 389 | listener.exitCompilationUnit(this); 390 | } 391 | } 392 | // @Override 393 | public accept(visitor: ComposeParserVisitor): Result { 394 | if (visitor.visitCompilationUnit) { 395 | return visitor.visitCompilationUnit(this); 396 | } else { 397 | return visitor.visitChildren(this); 398 | } 399 | } 400 | } 401 | 402 | 403 | export class EntityDeclContext extends ParserRuleContext { 404 | public entityModifier(): EntityModifierContext { 405 | return this.getRuleContext(0, EntityModifierContext); 406 | } 407 | public DOT(): TerminalNode[]; 408 | public DOT(i: number): TerminalNode; 409 | public DOT(i?: number): TerminalNode | TerminalNode[] { 410 | if (i === undefined) { 411 | return this.getTokens(ComposeParser.DOT); 412 | } else { 413 | return this.getToken(ComposeParser.DOT, i); 414 | } 415 | } 416 | public entityCall(): EntityCallContext[]; 417 | public entityCall(i: number): EntityCallContext; 418 | public entityCall(i?: number): EntityCallContext | EntityCallContext[] { 419 | if (i === undefined) { 420 | return this.getRuleContexts(EntityCallContext); 421 | } else { 422 | return this.getRuleContext(i, EntityCallContext); 423 | } 424 | } 425 | constructor(parent: ParserRuleContext | undefined, invokingState: number) { 426 | super(parent, invokingState); 427 | } 428 | // @Override 429 | public get ruleIndex(): number { return ComposeParser.RULE_entityDecl; } 430 | // @Override 431 | public enterRule(listener: ComposeParserListener): void { 432 | if (listener.enterEntityDecl) { 433 | listener.enterEntityDecl(this); 434 | } 435 | } 436 | // @Override 437 | public exitRule(listener: ComposeParserListener): void { 438 | if (listener.exitEntityDecl) { 439 | listener.exitEntityDecl(this); 440 | } 441 | } 442 | // @Override 443 | public accept(visitor: ComposeParserVisitor): Result { 444 | if (visitor.visitEntityDecl) { 445 | return visitor.visitEntityDecl(this); 446 | } else { 447 | return visitor.visitChildren(this); 448 | } 449 | } 450 | } 451 | 452 | 453 | export class EntityModifierContext extends ParserRuleContext { 454 | public StringLiteral(): TerminalNode { return this.getToken(ComposeParser.StringLiteral, 0); } 455 | constructor(parent: ParserRuleContext | undefined, invokingState: number) { 456 | super(parent, invokingState); 457 | } 458 | // @Override 459 | public get ruleIndex(): number { return ComposeParser.RULE_entityModifier; } 460 | // @Override 461 | public enterRule(listener: ComposeParserListener): void { 462 | if (listener.enterEntityModifier) { 463 | listener.enterEntityModifier(this); 464 | } 465 | } 466 | // @Override 467 | public exitRule(listener: ComposeParserListener): void { 468 | if (listener.exitEntityModifier) { 469 | listener.exitEntityModifier(this); 470 | } 471 | } 472 | // @Override 473 | public accept(visitor: ComposeParserVisitor): Result { 474 | if (visitor.visitEntityModifier) { 475 | return visitor.visitEntityModifier(this); 476 | } else { 477 | return visitor.visitChildren(this); 478 | } 479 | } 480 | } 481 | 482 | 483 | export class EntityCallContext extends ParserRuleContext { 484 | public identifier(): IdentifierContext { 485 | return this.getRuleContext(0, IdentifierContext); 486 | } 487 | public LPAREN(): TerminalNode { return this.getToken(ComposeParser.LPAREN, 0); } 488 | public parameterList(): ParameterListContext { 489 | return this.getRuleContext(0, ParameterListContext); 490 | } 491 | public RPAREN(): TerminalNode { return this.getToken(ComposeParser.RPAREN, 0); } 492 | constructor(parent: ParserRuleContext | undefined, invokingState: number) { 493 | super(parent, invokingState); 494 | } 495 | // @Override 496 | public get ruleIndex(): number { return ComposeParser.RULE_entityCall; } 497 | // @Override 498 | public enterRule(listener: ComposeParserListener): void { 499 | if (listener.enterEntityCall) { 500 | listener.enterEntityCall(this); 501 | } 502 | } 503 | // @Override 504 | public exitRule(listener: ComposeParserListener): void { 505 | if (listener.exitEntityCall) { 506 | listener.exitEntityCall(this); 507 | } 508 | } 509 | // @Override 510 | public accept(visitor: ComposeParserVisitor): Result { 511 | if (visitor.visitEntityCall) { 512 | return visitor.visitEntityCall(this); 513 | } else { 514 | return visitor.visitChildren(this); 515 | } 516 | } 517 | } 518 | 519 | 520 | export class ParameterListContext extends ParserRuleContext { 521 | public literal(): LiteralContext[]; 522 | public literal(i: number): LiteralContext; 523 | public literal(i?: number): LiteralContext | LiteralContext[] { 524 | if (i === undefined) { 525 | return this.getRuleContexts(LiteralContext); 526 | } else { 527 | return this.getRuleContext(i, LiteralContext); 528 | } 529 | } 530 | public COMMA(): TerminalNode[]; 531 | public COMMA(i: number): TerminalNode; 532 | public COMMA(i?: number): TerminalNode | TerminalNode[] { 533 | if (i === undefined) { 534 | return this.getTokens(ComposeParser.COMMA); 535 | } else { 536 | return this.getToken(ComposeParser.COMMA, i); 537 | } 538 | } 539 | constructor(parent: ParserRuleContext | undefined, invokingState: number) { 540 | super(parent, invokingState); 541 | } 542 | // @Override 543 | public get ruleIndex(): number { return ComposeParser.RULE_parameterList; } 544 | // @Override 545 | public enterRule(listener: ComposeParserListener): void { 546 | if (listener.enterParameterList) { 547 | listener.enterParameterList(this); 548 | } 549 | } 550 | // @Override 551 | public exitRule(listener: ComposeParserListener): void { 552 | if (listener.exitParameterList) { 553 | listener.exitParameterList(this); 554 | } 555 | } 556 | // @Override 557 | public accept(visitor: ComposeParserVisitor): Result { 558 | if (visitor.visitParameterList) { 559 | return visitor.visitParameterList(this); 560 | } else { 561 | return visitor.visitChildren(this); 562 | } 563 | } 564 | } 565 | 566 | 567 | export class LiteralContext extends ParserRuleContext { 568 | public IntegerLiteral(): TerminalNode | undefined { return this.tryGetToken(ComposeParser.IntegerLiteral, 0); } 569 | public FloatingPointLiteral(): TerminalNode | undefined { return this.tryGetToken(ComposeParser.FloatingPointLiteral, 0); } 570 | public BooleanLiteral(): TerminalNode | undefined { return this.tryGetToken(ComposeParser.BooleanLiteral, 0); } 571 | public CharacterLiteral(): TerminalNode | undefined { return this.tryGetToken(ComposeParser.CharacterLiteral, 0); } 572 | public StringLiteral(): TerminalNode | undefined { return this.tryGetToken(ComposeParser.StringLiteral, 0); } 573 | public NullLiteral(): TerminalNode | undefined { return this.tryGetToken(ComposeParser.NullLiteral, 0); } 574 | constructor(parent: ParserRuleContext | undefined, invokingState: number) { 575 | super(parent, invokingState); 576 | } 577 | // @Override 578 | public get ruleIndex(): number { return ComposeParser.RULE_literal; } 579 | // @Override 580 | public enterRule(listener: ComposeParserListener): void { 581 | if (listener.enterLiteral) { 582 | listener.enterLiteral(this); 583 | } 584 | } 585 | // @Override 586 | public exitRule(listener: ComposeParserListener): void { 587 | if (listener.exitLiteral) { 588 | listener.exitLiteral(this); 589 | } 590 | } 591 | // @Override 592 | public accept(visitor: ComposeParserVisitor): Result { 593 | if (visitor.visitLiteral) { 594 | return visitor.visitLiteral(this); 595 | } else { 596 | return visitor.visitChildren(this); 597 | } 598 | } 599 | } 600 | 601 | 602 | export class IdentifierContext extends ParserRuleContext { 603 | public Identifier(): TerminalNode { return this.getToken(ComposeParser.Identifier, 0); } 604 | constructor(parent: ParserRuleContext | undefined, invokingState: number) { 605 | super(parent, invokingState); 606 | } 607 | // @Override 608 | public get ruleIndex(): number { return ComposeParser.RULE_identifier; } 609 | // @Override 610 | public enterRule(listener: ComposeParserListener): void { 611 | if (listener.enterIdentifier) { 612 | listener.enterIdentifier(this); 613 | } 614 | } 615 | // @Override 616 | public exitRule(listener: ComposeParserListener): void { 617 | if (listener.exitIdentifier) { 618 | listener.exitIdentifier(this); 619 | } 620 | } 621 | // @Override 622 | public accept(visitor: ComposeParserVisitor): Result { 623 | if (visitor.visitIdentifier) { 624 | return visitor.visitIdentifier(this); 625 | } else { 626 | return visitor.visitChildren(this); 627 | } 628 | } 629 | } 630 | 631 | 632 | -------------------------------------------------------------------------------- /producer/js/src/ts/ComposeParser.ts: -------------------------------------------------------------------------------- 1 | // Generated from ../../grammar/ComposeParser.g4 by ANTLR 4.9.0-SNAPSHOT 2 | 3 | 4 | import { ATN } from "antlr4ts/atn/ATN"; 5 | import { ATNDeserializer } from "antlr4ts/atn/ATNDeserializer"; 6 | import { FailedPredicateException } from "antlr4ts/FailedPredicateException"; 7 | import { NotNull } from "antlr4ts/Decorators"; 8 | import { NoViableAltException } from "antlr4ts/NoViableAltException"; 9 | import { Override } from "antlr4ts/Decorators"; 10 | import { Parser } from "antlr4ts/Parser"; 11 | import { ParserRuleContext } from "antlr4ts/ParserRuleContext"; 12 | import { ParserATNSimulator } from "antlr4ts/atn/ParserATNSimulator"; 13 | import { ParseTreeListener } from "antlr4ts/tree/ParseTreeListener"; 14 | import { ParseTreeVisitor } from "antlr4ts/tree/ParseTreeVisitor"; 15 | import { RecognitionException } from "antlr4ts/RecognitionException"; 16 | import { RuleContext } from "antlr4ts/RuleContext"; 17 | //import { RuleVersion } from "antlr4ts/RuleVersion"; 18 | import { TerminalNode } from "antlr4ts/tree/TerminalNode"; 19 | import { Token } from "antlr4ts/Token"; 20 | import { TokenStream } from "antlr4ts/TokenStream"; 21 | import { Vocabulary } from "antlr4ts/Vocabulary"; 22 | import { VocabularyImpl } from "antlr4ts/VocabularyImpl"; 23 | 24 | import * as Utils from "antlr4ts/misc/Utils"; 25 | 26 | import { ComposeParserListener } from "./ComposeParserListener"; 27 | import { ComposeParserVisitor } from "./ComposeParserVisitor"; 28 | 29 | 30 | export class ComposeParser extends Parser { 31 | public static readonly LPAREN = 1; 32 | public static readonly RPAREN = 2; 33 | public static readonly LBRACE = 3; 34 | public static readonly RBRACE = 4; 35 | public static readonly LBRACK = 5; 36 | public static readonly RBRACK = 6; 37 | public static readonly SEMI = 7; 38 | public static readonly COMMA = 8; 39 | public static readonly DOT = 9; 40 | public static readonly Book = 10; 41 | public static readonly Note = 11; 42 | public static readonly Paser = 12; 43 | public static readonly Identifier = 13; 44 | public static readonly IntegerLiteral = 14; 45 | public static readonly FloatingPointLiteral = 15; 46 | public static readonly BooleanLiteral = 16; 47 | public static readonly CharacterLiteral = 17; 48 | public static readonly StringLiteral = 18; 49 | public static readonly NullLiteral = 19; 50 | public static readonly WS = 20; 51 | public static readonly COMMENT = 21; 52 | public static readonly LINE_COMMENT = 22; 53 | public static readonly RULE_compilationUnit = 0; 54 | public static readonly RULE_entityDecl = 1; 55 | public static readonly RULE_entityModifier = 2; 56 | public static readonly RULE_entityCall = 3; 57 | public static readonly RULE_parameterList = 4; 58 | public static readonly RULE_literal = 5; 59 | public static readonly RULE_identifier = 6; 60 | // tslint:disable:no-trailing-whitespace 61 | public static readonly ruleNames: string[] = [ 62 | "compilationUnit", "entityDecl", "entityModifier", "entityCall", "parameterList", 63 | "literal", "identifier", 64 | ]; 65 | 66 | private static readonly _LITERAL_NAMES: Array = [ 67 | undefined, "'('", "')'", "'{'", "'}'", "'['", "']'", "';'", "','", "'.'", 68 | "'Book'", "'Note'", "'Paper'", undefined, undefined, undefined, undefined, 69 | undefined, undefined, "'null'", 70 | ]; 71 | private static readonly _SYMBOLIC_NAMES: Array = [ 72 | undefined, "LPAREN", "RPAREN", "LBRACE", "RBRACE", "LBRACK", "RBRACK", 73 | "SEMI", "COMMA", "DOT", "Book", "Note", "Paser", "Identifier", "IntegerLiteral", 74 | "FloatingPointLiteral", "BooleanLiteral", "CharacterLiteral", "StringLiteral", 75 | "NullLiteral", "WS", "COMMENT", "LINE_COMMENT", 76 | ]; 77 | public static readonly VOCABULARY: Vocabulary = new VocabularyImpl(ComposeParser._LITERAL_NAMES, ComposeParser._SYMBOLIC_NAMES, []); 78 | 79 | // @Override 80 | // @NotNull 81 | public get vocabulary(): Vocabulary { 82 | return ComposeParser.VOCABULARY; 83 | } 84 | // tslint:enable:no-trailing-whitespace 85 | 86 | // @Override 87 | public get grammarFileName(): string { return "ComposeParser.g4"; } 88 | 89 | // @Override 90 | public get ruleNames(): string[] { return ComposeParser.ruleNames; } 91 | 92 | // @Override 93 | public get serializedATN(): string { return ComposeParser._serializedATN; } 94 | 95 | protected createFailedPredicateException(predicate?: string, message?: string): FailedPredicateException { 96 | return new FailedPredicateException(this, predicate, message); 97 | } 98 | 99 | constructor(input: TokenStream) { 100 | super(input); 101 | this._interp = new ParserATNSimulator(ComposeParser._ATN, this); 102 | } 103 | // @RuleVersion(0) 104 | public compilationUnit(): CompilationUnitContext { 105 | let _localctx: CompilationUnitContext = new CompilationUnitContext(this._ctx, this.state); 106 | this.enterRule(_localctx, 0, ComposeParser.RULE_compilationUnit); 107 | let _la: number; 108 | try { 109 | this.enterOuterAlt(_localctx, 1); 110 | { 111 | this.state = 15; 112 | this._errHandler.sync(this); 113 | _la = this._input.LA(1); 114 | if ((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << ComposeParser.Book) | (1 << ComposeParser.Note) | (1 << ComposeParser.Paser))) !== 0)) { 115 | { 116 | this.state = 14; 117 | this.entityDecl(); 118 | } 119 | } 120 | 121 | } 122 | } 123 | catch (re) { 124 | if (re instanceof RecognitionException) { 125 | _localctx.exception = re; 126 | this._errHandler.reportError(this, re); 127 | this._errHandler.recover(this, re); 128 | } else { 129 | throw re; 130 | } 131 | } 132 | finally { 133 | this.exitRule(); 134 | } 135 | return _localctx; 136 | } 137 | // @RuleVersion(0) 138 | public entityDecl(): EntityDeclContext { 139 | let _localctx: EntityDeclContext = new EntityDeclContext(this._ctx, this.state); 140 | this.enterRule(_localctx, 2, ComposeParser.RULE_entityDecl); 141 | let _la: number; 142 | try { 143 | this.enterOuterAlt(_localctx, 1); 144 | { 145 | this.state = 17; 146 | this.entityModifier(); 147 | this.state = 22; 148 | this._errHandler.sync(this); 149 | _la = this._input.LA(1); 150 | while (_la === ComposeParser.DOT) { 151 | { 152 | { 153 | this.state = 18; 154 | this.match(ComposeParser.DOT); 155 | this.state = 19; 156 | this.entityCall(); 157 | } 158 | } 159 | this.state = 24; 160 | this._errHandler.sync(this); 161 | _la = this._input.LA(1); 162 | } 163 | } 164 | } 165 | catch (re) { 166 | if (re instanceof RecognitionException) { 167 | _localctx.exception = re; 168 | this._errHandler.reportError(this, re); 169 | this._errHandler.recover(this, re); 170 | } else { 171 | throw re; 172 | } 173 | } 174 | finally { 175 | this.exitRule(); 176 | } 177 | return _localctx; 178 | } 179 | // @RuleVersion(0) 180 | public entityModifier(): EntityModifierContext { 181 | let _localctx: EntityModifierContext = new EntityModifierContext(this._ctx, this.state); 182 | this.enterRule(_localctx, 4, ComposeParser.RULE_entityModifier); 183 | let _la: number; 184 | try { 185 | this.enterOuterAlt(_localctx, 1); 186 | { 187 | this.state = 25; 188 | _la = this._input.LA(1); 189 | if (!((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << ComposeParser.Book) | (1 << ComposeParser.Note) | (1 << ComposeParser.Paser))) !== 0))) { 190 | this._errHandler.recoverInline(this); 191 | } else { 192 | if (this._input.LA(1) === Token.EOF) { 193 | this.matchedEOF = true; 194 | } 195 | 196 | this._errHandler.reportMatch(this); 197 | this.consume(); 198 | } 199 | } 200 | } 201 | catch (re) { 202 | if (re instanceof RecognitionException) { 203 | _localctx.exception = re; 204 | this._errHandler.reportError(this, re); 205 | this._errHandler.recover(this, re); 206 | } else { 207 | throw re; 208 | } 209 | } 210 | finally { 211 | this.exitRule(); 212 | } 213 | return _localctx; 214 | } 215 | // @RuleVersion(0) 216 | public entityCall(): EntityCallContext { 217 | let _localctx: EntityCallContext = new EntityCallContext(this._ctx, this.state); 218 | this.enterRule(_localctx, 6, ComposeParser.RULE_entityCall); 219 | try { 220 | this.enterOuterAlt(_localctx, 1); 221 | { 222 | this.state = 27; 223 | this.identifier(); 224 | this.state = 28; 225 | this.match(ComposeParser.LPAREN); 226 | this.state = 29; 227 | this.parameterList(); 228 | this.state = 30; 229 | this.match(ComposeParser.RPAREN); 230 | } 231 | } 232 | catch (re) { 233 | if (re instanceof RecognitionException) { 234 | _localctx.exception = re; 235 | this._errHandler.reportError(this, re); 236 | this._errHandler.recover(this, re); 237 | } else { 238 | throw re; 239 | } 240 | } 241 | finally { 242 | this.exitRule(); 243 | } 244 | return _localctx; 245 | } 246 | // @RuleVersion(0) 247 | public parameterList(): ParameterListContext { 248 | let _localctx: ParameterListContext = new ParameterListContext(this._ctx, this.state); 249 | this.enterRule(_localctx, 8, ComposeParser.RULE_parameterList); 250 | let _la: number; 251 | try { 252 | this.enterOuterAlt(_localctx, 1); 253 | { 254 | this.state = 32; 255 | this.literal(); 256 | this.state = 37; 257 | this._errHandler.sync(this); 258 | _la = this._input.LA(1); 259 | while (_la === ComposeParser.COMMA) { 260 | { 261 | { 262 | this.state = 33; 263 | this.match(ComposeParser.COMMA); 264 | this.state = 34; 265 | this.literal(); 266 | } 267 | } 268 | this.state = 39; 269 | this._errHandler.sync(this); 270 | _la = this._input.LA(1); 271 | } 272 | } 273 | } 274 | catch (re) { 275 | if (re instanceof RecognitionException) { 276 | _localctx.exception = re; 277 | this._errHandler.reportError(this, re); 278 | this._errHandler.recover(this, re); 279 | } else { 280 | throw re; 281 | } 282 | } 283 | finally { 284 | this.exitRule(); 285 | } 286 | return _localctx; 287 | } 288 | // @RuleVersion(0) 289 | public literal(): LiteralContext { 290 | let _localctx: LiteralContext = new LiteralContext(this._ctx, this.state); 291 | this.enterRule(_localctx, 10, ComposeParser.RULE_literal); 292 | let _la: number; 293 | try { 294 | this.enterOuterAlt(_localctx, 1); 295 | { 296 | this.state = 40; 297 | _la = this._input.LA(1); 298 | if (!((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << ComposeParser.IntegerLiteral) | (1 << ComposeParser.FloatingPointLiteral) | (1 << ComposeParser.BooleanLiteral) | (1 << ComposeParser.CharacterLiteral) | (1 << ComposeParser.StringLiteral) | (1 << ComposeParser.NullLiteral))) !== 0))) { 299 | this._errHandler.recoverInline(this); 300 | } else { 301 | if (this._input.LA(1) === Token.EOF) { 302 | this.matchedEOF = true; 303 | } 304 | 305 | this._errHandler.reportMatch(this); 306 | this.consume(); 307 | } 308 | } 309 | } 310 | catch (re) { 311 | if (re instanceof RecognitionException) { 312 | _localctx.exception = re; 313 | this._errHandler.reportError(this, re); 314 | this._errHandler.recover(this, re); 315 | } else { 316 | throw re; 317 | } 318 | } 319 | finally { 320 | this.exitRule(); 321 | } 322 | return _localctx; 323 | } 324 | // @RuleVersion(0) 325 | public identifier(): IdentifierContext { 326 | let _localctx: IdentifierContext = new IdentifierContext(this._ctx, this.state); 327 | this.enterRule(_localctx, 12, ComposeParser.RULE_identifier); 328 | try { 329 | this.enterOuterAlt(_localctx, 1); 330 | { 331 | this.state = 42; 332 | this.match(ComposeParser.Identifier); 333 | } 334 | } 335 | catch (re) { 336 | if (re instanceof RecognitionException) { 337 | _localctx.exception = re; 338 | this._errHandler.reportError(this, re); 339 | this._errHandler.recover(this, re); 340 | } else { 341 | throw re; 342 | } 343 | } 344 | finally { 345 | this.exitRule(); 346 | } 347 | return _localctx; 348 | } 349 | 350 | public static readonly _serializedATN: string = 351 | "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x03\x18/\x04\x02" + 352 | "\t\x02\x04\x03\t\x03\x04\x04\t\x04\x04\x05\t\x05\x04\x06\t\x06\x04\x07" + 353 | "\t\x07\x04\b\t\b\x03\x02\x05\x02\x12\n\x02\x03\x03\x03\x03\x03\x03\x07" + 354 | "\x03\x17\n\x03\f\x03\x0E\x03\x1A\v\x03\x03\x04\x03\x04\x03\x05\x03\x05" + 355 | "\x03\x05\x03\x05\x03\x05\x03\x06\x03\x06\x03\x06\x07\x06&\n\x06\f\x06" + 356 | "\x0E\x06)\v\x06\x03\x07\x03\x07\x03\b\x03\b\x03\b\x02\x02\x02\t\x02\x02" + 357 | "\x04\x02\x06\x02\b\x02\n\x02\f\x02\x0E\x02\x02\x04\x03\x02\f\x0E\x03\x02" + 358 | "\x10\x15\x02*\x02\x11\x03\x02\x02\x02\x04\x13\x03\x02\x02\x02\x06\x1B" + 359 | "\x03\x02\x02\x02\b\x1D\x03\x02\x02\x02\n\"\x03\x02\x02\x02\f*\x03\x02" + 360 | "\x02\x02\x0E,\x03\x02\x02\x02\x10\x12\x05\x04\x03\x02\x11\x10\x03\x02" + 361 | "\x02\x02\x11\x12\x03\x02\x02\x02\x12\x03\x03\x02\x02\x02\x13\x18\x05\x06" + 362 | "\x04\x02\x14\x15\x07\v\x02\x02\x15\x17\x05\b\x05\x02\x16\x14\x03\x02\x02" + 363 | "\x02\x17\x1A\x03\x02\x02\x02\x18\x16\x03\x02\x02\x02\x18\x19\x03\x02\x02" + 364 | "\x02\x19\x05\x03\x02\x02\x02\x1A\x18\x03\x02\x02\x02\x1B\x1C\t\x02\x02" + 365 | "\x02\x1C\x07\x03\x02\x02\x02\x1D\x1E\x05\x0E\b\x02\x1E\x1F\x07\x03\x02" + 366 | "\x02\x1F \x05\n\x06\x02 !\x07\x04\x02\x02!\t\x03\x02\x02\x02\"\'\x05\f" + 367 | "\x07\x02#$\x07\n\x02\x02$&\x05\f\x07\x02%#\x03\x02\x02\x02&)\x03\x02\x02" + 368 | "\x02\'%\x03\x02\x02\x02\'(\x03\x02\x02\x02(\v\x03\x02\x02\x02)\'\x03\x02" + 369 | "\x02\x02*+\t\x03\x02\x02+\r\x03\x02\x02\x02,-\x07\x0F\x02\x02-\x0F\x03" + 370 | "\x02\x02\x02\x05\x11\x18\'"; 371 | public static __ATN: ATN; 372 | public static get _ATN(): ATN { 373 | if (!ComposeParser.__ATN) { 374 | ComposeParser.__ATN = new ATNDeserializer().deserialize(Utils.toCharArray(ComposeParser._serializedATN)); 375 | } 376 | 377 | return ComposeParser.__ATN; 378 | } 379 | 380 | } 381 | 382 | export class CompilationUnitContext extends ParserRuleContext { 383 | public entityDecl(): EntityDeclContext | undefined { 384 | return this.tryGetRuleContext(0, EntityDeclContext); 385 | } 386 | constructor(parent: ParserRuleContext | undefined, invokingState: number) { 387 | super(parent, invokingState); 388 | } 389 | // @Override 390 | public get ruleIndex(): number { return ComposeParser.RULE_compilationUnit; } 391 | // @Override 392 | public enterRule(listener: ComposeParserListener): void { 393 | if (listener.enterCompilationUnit) { 394 | listener.enterCompilationUnit(this); 395 | } 396 | } 397 | // @Override 398 | public exitRule(listener: ComposeParserListener): void { 399 | if (listener.exitCompilationUnit) { 400 | listener.exitCompilationUnit(this); 401 | } 402 | } 403 | // @Override 404 | public accept(visitor: ComposeParserVisitor): Result { 405 | if (visitor.visitCompilationUnit) { 406 | return visitor.visitCompilationUnit(this); 407 | } else { 408 | return visitor.visitChildren(this); 409 | } 410 | } 411 | } 412 | 413 | 414 | export class EntityDeclContext extends ParserRuleContext { 415 | public entityModifier(): EntityModifierContext { 416 | return this.getRuleContext(0, EntityModifierContext); 417 | } 418 | public DOT(): TerminalNode[]; 419 | public DOT(i: number): TerminalNode; 420 | public DOT(i?: number): TerminalNode | TerminalNode[] { 421 | if (i === undefined) { 422 | return this.getTokens(ComposeParser.DOT); 423 | } else { 424 | return this.getToken(ComposeParser.DOT, i); 425 | } 426 | } 427 | public entityCall(): EntityCallContext[]; 428 | public entityCall(i: number): EntityCallContext; 429 | public entityCall(i?: number): EntityCallContext | EntityCallContext[] { 430 | if (i === undefined) { 431 | return this.getRuleContexts(EntityCallContext); 432 | } else { 433 | return this.getRuleContext(i, EntityCallContext); 434 | } 435 | } 436 | constructor(parent: ParserRuleContext | undefined, invokingState: number) { 437 | super(parent, invokingState); 438 | } 439 | // @Override 440 | public get ruleIndex(): number { return ComposeParser.RULE_entityDecl; } 441 | // @Override 442 | public enterRule(listener: ComposeParserListener): void { 443 | if (listener.enterEntityDecl) { 444 | listener.enterEntityDecl(this); 445 | } 446 | } 447 | // @Override 448 | public exitRule(listener: ComposeParserListener): void { 449 | if (listener.exitEntityDecl) { 450 | listener.exitEntityDecl(this); 451 | } 452 | } 453 | // @Override 454 | public accept(visitor: ComposeParserVisitor): Result { 455 | if (visitor.visitEntityDecl) { 456 | return visitor.visitEntityDecl(this); 457 | } else { 458 | return visitor.visitChildren(this); 459 | } 460 | } 461 | } 462 | 463 | 464 | export class EntityModifierContext extends ParserRuleContext { 465 | public Book(): TerminalNode | undefined { return this.tryGetToken(ComposeParser.Book, 0); } 466 | public Note(): TerminalNode | undefined { return this.tryGetToken(ComposeParser.Note, 0); } 467 | public Paser(): TerminalNode | undefined { return this.tryGetToken(ComposeParser.Paser, 0); } 468 | constructor(parent: ParserRuleContext | undefined, invokingState: number) { 469 | super(parent, invokingState); 470 | } 471 | // @Override 472 | public get ruleIndex(): number { return ComposeParser.RULE_entityModifier; } 473 | // @Override 474 | public enterRule(listener: ComposeParserListener): void { 475 | if (listener.enterEntityModifier) { 476 | listener.enterEntityModifier(this); 477 | } 478 | } 479 | // @Override 480 | public exitRule(listener: ComposeParserListener): void { 481 | if (listener.exitEntityModifier) { 482 | listener.exitEntityModifier(this); 483 | } 484 | } 485 | // @Override 486 | public accept(visitor: ComposeParserVisitor): Result { 487 | if (visitor.visitEntityModifier) { 488 | return visitor.visitEntityModifier(this); 489 | } else { 490 | return visitor.visitChildren(this); 491 | } 492 | } 493 | } 494 | 495 | 496 | export class EntityCallContext extends ParserRuleContext { 497 | public identifier(): IdentifierContext { 498 | return this.getRuleContext(0, IdentifierContext); 499 | } 500 | public LPAREN(): TerminalNode { return this.getToken(ComposeParser.LPAREN, 0); } 501 | public parameterList(): ParameterListContext { 502 | return this.getRuleContext(0, ParameterListContext); 503 | } 504 | public RPAREN(): TerminalNode { return this.getToken(ComposeParser.RPAREN, 0); } 505 | constructor(parent: ParserRuleContext | undefined, invokingState: number) { 506 | super(parent, invokingState); 507 | } 508 | // @Override 509 | public get ruleIndex(): number { return ComposeParser.RULE_entityCall; } 510 | // @Override 511 | public enterRule(listener: ComposeParserListener): void { 512 | if (listener.enterEntityCall) { 513 | listener.enterEntityCall(this); 514 | } 515 | } 516 | // @Override 517 | public exitRule(listener: ComposeParserListener): void { 518 | if (listener.exitEntityCall) { 519 | listener.exitEntityCall(this); 520 | } 521 | } 522 | // @Override 523 | public accept(visitor: ComposeParserVisitor): Result { 524 | if (visitor.visitEntityCall) { 525 | return visitor.visitEntityCall(this); 526 | } else { 527 | return visitor.visitChildren(this); 528 | } 529 | } 530 | } 531 | 532 | 533 | export class ParameterListContext extends ParserRuleContext { 534 | public literal(): LiteralContext[]; 535 | public literal(i: number): LiteralContext; 536 | public literal(i?: number): LiteralContext | LiteralContext[] { 537 | if (i === undefined) { 538 | return this.getRuleContexts(LiteralContext); 539 | } else { 540 | return this.getRuleContext(i, LiteralContext); 541 | } 542 | } 543 | public COMMA(): TerminalNode[]; 544 | public COMMA(i: number): TerminalNode; 545 | public COMMA(i?: number): TerminalNode | TerminalNode[] { 546 | if (i === undefined) { 547 | return this.getTokens(ComposeParser.COMMA); 548 | } else { 549 | return this.getToken(ComposeParser.COMMA, i); 550 | } 551 | } 552 | constructor(parent: ParserRuleContext | undefined, invokingState: number) { 553 | super(parent, invokingState); 554 | } 555 | // @Override 556 | public get ruleIndex(): number { return ComposeParser.RULE_parameterList; } 557 | // @Override 558 | public enterRule(listener: ComposeParserListener): void { 559 | if (listener.enterParameterList) { 560 | listener.enterParameterList(this); 561 | } 562 | } 563 | // @Override 564 | public exitRule(listener: ComposeParserListener): void { 565 | if (listener.exitParameterList) { 566 | listener.exitParameterList(this); 567 | } 568 | } 569 | // @Override 570 | public accept(visitor: ComposeParserVisitor): Result { 571 | if (visitor.visitParameterList) { 572 | return visitor.visitParameterList(this); 573 | } else { 574 | return visitor.visitChildren(this); 575 | } 576 | } 577 | } 578 | 579 | 580 | export class LiteralContext extends ParserRuleContext { 581 | public IntegerLiteral(): TerminalNode | undefined { return this.tryGetToken(ComposeParser.IntegerLiteral, 0); } 582 | public FloatingPointLiteral(): TerminalNode | undefined { return this.tryGetToken(ComposeParser.FloatingPointLiteral, 0); } 583 | public BooleanLiteral(): TerminalNode | undefined { return this.tryGetToken(ComposeParser.BooleanLiteral, 0); } 584 | public CharacterLiteral(): TerminalNode | undefined { return this.tryGetToken(ComposeParser.CharacterLiteral, 0); } 585 | public StringLiteral(): TerminalNode | undefined { return this.tryGetToken(ComposeParser.StringLiteral, 0); } 586 | public NullLiteral(): TerminalNode | undefined { return this.tryGetToken(ComposeParser.NullLiteral, 0); } 587 | constructor(parent: ParserRuleContext | undefined, invokingState: number) { 588 | super(parent, invokingState); 589 | } 590 | // @Override 591 | public get ruleIndex(): number { return ComposeParser.RULE_literal; } 592 | // @Override 593 | public enterRule(listener: ComposeParserListener): void { 594 | if (listener.enterLiteral) { 595 | listener.enterLiteral(this); 596 | } 597 | } 598 | // @Override 599 | public exitRule(listener: ComposeParserListener): void { 600 | if (listener.exitLiteral) { 601 | listener.exitLiteral(this); 602 | } 603 | } 604 | // @Override 605 | public accept(visitor: ComposeParserVisitor): Result { 606 | if (visitor.visitLiteral) { 607 | return visitor.visitLiteral(this); 608 | } else { 609 | return visitor.visitChildren(this); 610 | } 611 | } 612 | } 613 | 614 | 615 | export class IdentifierContext extends ParserRuleContext { 616 | public Identifier(): TerminalNode { return this.getToken(ComposeParser.Identifier, 0); } 617 | constructor(parent: ParserRuleContext | undefined, invokingState: number) { 618 | super(parent, invokingState); 619 | } 620 | // @Override 621 | public get ruleIndex(): number { return ComposeParser.RULE_identifier; } 622 | // @Override 623 | public enterRule(listener: ComposeParserListener): void { 624 | if (listener.enterIdentifier) { 625 | listener.enterIdentifier(this); 626 | } 627 | } 628 | // @Override 629 | public exitRule(listener: ComposeParserListener): void { 630 | if (listener.exitIdentifier) { 631 | listener.exitIdentifier(this); 632 | } 633 | } 634 | // @Override 635 | public accept(visitor: ComposeParserVisitor): Result { 636 | if (visitor.visitIdentifier) { 637 | return visitor.visitIdentifier(this); 638 | } else { 639 | return visitor.visitChildren(this); 640 | } 641 | } 642 | } 643 | 644 | 645 | -------------------------------------------------------------------------------- /producer/js/grammar/ComposeLexer.ts: -------------------------------------------------------------------------------- 1 | // Generated from ../../grammar/ComposeLexer.g4 by ANTLR 4.9.0-SNAPSHOT 2 | 3 | 4 | import { ATN } from "antlr4ts/atn/ATN"; 5 | import { ATNDeserializer } from "antlr4ts/atn/ATNDeserializer"; 6 | import { CharStream } from "antlr4ts/CharStream"; 7 | import { Lexer } from "antlr4ts/Lexer"; 8 | import { LexerATNSimulator } from "antlr4ts/atn/LexerATNSimulator"; 9 | import { NotNull } from "antlr4ts/Decorators"; 10 | import { Override } from "antlr4ts/Decorators"; 11 | import { RuleContext } from "antlr4ts/RuleContext"; 12 | import { Vocabulary } from "antlr4ts/Vocabulary"; 13 | import { VocabularyImpl } from "antlr4ts/VocabularyImpl"; 14 | 15 | import * as Utils from "antlr4ts/misc/Utils"; 16 | 17 | 18 | export class ComposeLexer extends Lexer { 19 | public static readonly LPAREN = 1; 20 | public static readonly RPAREN = 2; 21 | public static readonly LBRACE = 3; 22 | public static readonly RBRACE = 4; 23 | public static readonly LBRACK = 5; 24 | public static readonly RBRACK = 6; 25 | public static readonly SEMI = 7; 26 | public static readonly COMMA = 8; 27 | public static readonly DOT = 9; 28 | public static readonly Book = 10; 29 | public static readonly Note = 11; 30 | public static readonly Paser = 12; 31 | public static readonly Identifier = 13; 32 | public static readonly IntegerLiteral = 14; 33 | public static readonly FloatingPointLiteral = 15; 34 | public static readonly BooleanLiteral = 16; 35 | public static readonly CharacterLiteral = 17; 36 | public static readonly StringLiteral = 18; 37 | public static readonly NullLiteral = 19; 38 | public static readonly WS = 20; 39 | public static readonly COMMENT = 21; 40 | public static readonly LINE_COMMENT = 22; 41 | 42 | // tslint:disable:no-trailing-whitespace 43 | public static readonly channelNames: string[] = [ 44 | "DEFAULT_TOKEN_CHANNEL", "HIDDEN", 45 | ]; 46 | 47 | // tslint:disable:no-trailing-whitespace 48 | public static readonly modeNames: string[] = [ 49 | "DEFAULT_MODE", 50 | ]; 51 | 52 | public static readonly ruleNames: string[] = [ 53 | "LPAREN", "RPAREN", "LBRACE", "RBRACE", "LBRACK", "RBRACK", "SEMI", "COMMA", 54 | "DOT", "Book", "Note", "Paser", "Identifier", "IntegerLiteral", "DecimalIntegerLiteral", 55 | "HexIntegerLiteral", "OctalIntegerLiteral", "BinaryIntegerLiteral", "IntegerTypeSuffix", 56 | "DecimalNumeral", "Digits", "Digit", "NonZeroDigit", "DigitsAndUnderscores", 57 | "DigitOrUnderscore", "Underscores", "HexNumeral", "HexDigits", "HexDigit", 58 | "HexDigitsAndUnderscores", "HexDigitOrUnderscore", "OctalNumeral", "OctalDigits", 59 | "OctalDigit", "OctalDigitsAndUnderscores", "OctalDigitOrUnderscore", "BinaryNumeral", 60 | "BinaryDigits", "BinaryDigit", "BinaryDigitsAndUnderscores", "BinaryDigitOrUnderscore", 61 | "FloatingPointLiteral", "DecimalFloatingPointLiteral", "ExponentPart", 62 | "ExponentIndicator", "SignedInteger", "Sign", "FloatTypeSuffix", "HexadecimalFloatingPointLiteral", 63 | "HexSignificand", "BinaryExponent", "BinaryExponentIndicator", "BooleanLiteral", 64 | "CharacterLiteral", "SingleCharacter", "StringLiteral", "StringCharacters", 65 | "StringCharacter", "EscapeSequence", "OctalEscape", "ZeroToThree", "UnicodeEscape", 66 | "NullLiteral", "JavaLetter", "JavaLetterOrDigit", "WS", "COMMENT", "LINE_COMMENT", 67 | ]; 68 | 69 | private static readonly _LITERAL_NAMES: Array = [ 70 | undefined, "'('", "')'", "'{'", "'}'", "'['", "']'", "';'", "','", "'.'", 71 | "'Book'", "'Note'", "'Paper'", undefined, undefined, undefined, undefined, 72 | undefined, undefined, "'null'", 73 | ]; 74 | private static readonly _SYMBOLIC_NAMES: Array = [ 75 | undefined, "LPAREN", "RPAREN", "LBRACE", "RBRACE", "LBRACK", "RBRACK", 76 | "SEMI", "COMMA", "DOT", "Book", "Note", "Paser", "Identifier", "IntegerLiteral", 77 | "FloatingPointLiteral", "BooleanLiteral", "CharacterLiteral", "StringLiteral", 78 | "NullLiteral", "WS", "COMMENT", "LINE_COMMENT", 79 | ]; 80 | public static readonly VOCABULARY: Vocabulary = new VocabularyImpl(ComposeLexer._LITERAL_NAMES, ComposeLexer._SYMBOLIC_NAMES, []); 81 | 82 | // @Override 83 | // @NotNull 84 | public get vocabulary(): Vocabulary { 85 | return ComposeLexer.VOCABULARY; 86 | } 87 | // tslint:enable:no-trailing-whitespace 88 | 89 | 90 | constructor(input: CharStream) { 91 | super(input); 92 | this._interp = new LexerATNSimulator(ComposeLexer._ATN, this); 93 | } 94 | 95 | // @Override 96 | public get grammarFileName(): string { return "ComposeLexer.g4"; } 97 | 98 | // @Override 99 | public get ruleNames(): string[] { return ComposeLexer.ruleNames; } 100 | 101 | // @Override 102 | public get serializedATN(): string { return ComposeLexer._serializedATN; } 103 | 104 | // @Override 105 | public get channelNames(): string[] { return ComposeLexer.channelNames; } 106 | 107 | // @Override 108 | public get modeNames(): string[] { return ComposeLexer.modeNames; } 109 | 110 | public static readonly _serializedATN: string = 111 | "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x02\x18\u01F4\b\x01" + 112 | "\x04\x02\t\x02\x04\x03\t\x03\x04\x04\t\x04\x04\x05\t\x05\x04\x06\t\x06" + 113 | "\x04\x07\t\x07\x04\b\t\b\x04\t\t\t\x04\n\t\n\x04\v\t\v\x04\f\t\f\x04\r" + 114 | "\t\r\x04\x0E\t\x0E\x04\x0F\t\x0F\x04\x10\t\x10\x04\x11\t\x11\x04\x12\t" + 115 | "\x12\x04\x13\t\x13\x04\x14\t\x14\x04\x15\t\x15\x04\x16\t\x16\x04\x17\t" + 116 | "\x17\x04\x18\t\x18\x04\x19\t\x19\x04\x1A\t\x1A\x04\x1B\t\x1B\x04\x1C\t" + 117 | "\x1C\x04\x1D\t\x1D\x04\x1E\t\x1E\x04\x1F\t\x1F\x04 \t \x04!\t!\x04\"\t" + 118 | "\"\x04#\t#\x04$\t$\x04%\t%\x04&\t&\x04\'\t\'\x04(\t(\x04)\t)\x04*\t*\x04" + 119 | "+\t+\x04,\t,\x04-\t-\x04.\t.\x04/\t/\x040\t0\x041\t1\x042\t2\x043\t3\x04" + 120 | "4\t4\x045\t5\x046\t6\x047\t7\x048\t8\x049\t9\x04:\t:\x04;\t;\x04<\t<\x04" + 121 | "=\t=\x04>\t>\x04?\t?\x04@\t@\x04A\tA\x04B\tB\x04C\tC\x04D\tD\x04E\tE\x03" + 122 | "\x02\x03\x02\x03\x03\x03\x03\x03\x04\x03\x04\x03\x05\x03\x05\x03\x06\x03" + 123 | "\x06\x03\x07\x03\x07\x03\b\x03\b\x03\t\x03\t\x03\n\x03\n\x03\v\x03\v\x03" + 124 | "\v\x03\v\x03\v\x03\f\x03\f\x03\f\x03\f\x03\f\x03\r\x03\r\x03\r\x03\r\x03" + 125 | "\r\x03\r\x03\x0E\x03\x0E\x07\x0E\xB0\n\x0E\f\x0E\x0E\x0E\xB3\v\x0E\x03" + 126 | "\x0F\x03\x0F\x03\x0F\x03\x0F\x05\x0F\xB9\n\x0F\x03\x10\x03\x10\x05\x10" + 127 | "\xBD\n\x10\x03\x11\x03\x11\x05\x11\xC1\n\x11\x03\x12\x03\x12\x05\x12\xC5" + 128 | "\n\x12\x03\x13\x03\x13\x05\x13\xC9\n\x13\x03\x14\x03\x14\x03\x15\x03\x15" + 129 | "\x03\x15\x05\x15\xD0\n\x15\x03\x15\x03\x15\x03\x15\x05\x15\xD5\n\x15\x05" + 130 | "\x15\xD7\n\x15\x03\x16\x03\x16\x05\x16\xDB\n\x16\x03\x16\x05\x16\xDE\n" + 131 | "\x16\x03\x17\x03\x17\x05\x17\xE2\n\x17\x03\x18\x03\x18\x03\x19\x06\x19" + 132 | "\xE7\n\x19\r\x19\x0E\x19\xE8\x03\x1A\x03\x1A\x05\x1A\xED\n\x1A\x03\x1B" + 133 | "\x06\x1B\xF0\n\x1B\r\x1B\x0E\x1B\xF1\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03" + 134 | "\x1D\x03\x1D\x05\x1D\xFA\n\x1D\x03\x1D\x05\x1D\xFD\n\x1D\x03\x1E\x03\x1E" + 135 | "\x03\x1F\x06\x1F\u0102\n\x1F\r\x1F\x0E\x1F\u0103\x03 \x03 \x05 \u0108" + 136 | "\n \x03!\x03!\x05!\u010C\n!\x03!\x03!\x03\"\x03\"\x05\"\u0112\n\"\x03" + 137 | "\"\x05\"\u0115\n\"\x03#\x03#\x03$\x06$\u011A\n$\r$\x0E$\u011B\x03%\x03" + 138 | "%\x05%\u0120\n%\x03&\x03&\x03&\x03&\x03\'\x03\'\x05\'\u0128\n\'\x03\'" + 139 | "\x05\'\u012B\n\'\x03(\x03(\x03)\x06)\u0130\n)\r)\x0E)\u0131\x03*\x03*" + 140 | "\x05*\u0136\n*\x03+\x03+\x05+\u013A\n+\x03,\x03,\x03,\x05,\u013F\n,\x03" + 141 | ",\x05,\u0142\n,\x03,\x05,\u0145\n,\x03,\x03,\x03,\x05,\u014A\n,\x03,\x05" + 142 | ",\u014D\n,\x03,\x03,\x03,\x05,\u0152\n,\x03,\x03,\x03,\x05,\u0157\n,\x03" + 143 | "-\x03-\x03-\x03.\x03.\x03/\x05/\u015F\n/\x03/\x03/\x030\x030\x031\x03" + 144 | "1\x032\x032\x032\x052\u016A\n2\x033\x033\x053\u016E\n3\x033\x033\x033" + 145 | "\x053\u0173\n3\x033\x033\x053\u0177\n3\x034\x034\x034\x035\x035\x036\x03" + 146 | "6\x036\x036\x036\x036\x036\x036\x036\x056\u0187\n6\x037\x037\x037\x03" + 147 | "7\x037\x037\x037\x037\x057\u0191\n7\x038\x038\x039\x039\x059\u0197\n9" + 148 | "\x039\x039\x03:\x06:\u019C\n:\r:\x0E:\u019D\x03;\x03;\x05;\u01A2\n;\x03" + 149 | "<\x03<\x03<\x03<\x05<\u01A8\n<\x03=\x03=\x03=\x03=\x03=\x03=\x03=\x03" + 150 | "=\x03=\x03=\x03=\x05=\u01B5\n=\x03>\x03>\x03?\x03?\x06?\u01BB\n?\r?\x0E" + 151 | "?\u01BC\x03?\x03?\x03?\x03?\x03?\x03@\x03@\x03@\x03@\x03@\x03A\x03A\x03" + 152 | "A\x03A\x05A\u01CD\nA\x03B\x03B\x03B\x03B\x05B\u01D3\nB\x03C\x06C\u01D6" + 153 | "\nC\rC\x0EC\u01D7\x03C\x03C\x03D\x03D\x03D\x03D\x07D\u01E0\nD\fD\x0ED" + 154 | "\u01E3\vD\x03D\x03D\x03D\x03D\x03D\x03E\x03E\x03E\x03E\x07E\u01EE\nE\f" + 155 | "E\x0EE\u01F1\vE\x03E\x03E\x03\u01E1\x02\x02F\x03\x02\x03\x05\x02\x04\x07" + 156 | "\x02\x05\t\x02\x06\v\x02\x07\r\x02\b\x0F\x02\t\x11\x02\n\x13\x02\v\x15" + 157 | "\x02\f\x17\x02\r\x19\x02\x0E\x1B\x02\x0F\x1D\x02\x10\x1F\x02\x02!\x02" + 158 | "\x02#\x02\x02%\x02\x02\'\x02\x02)\x02\x02+\x02\x02-\x02\x02/\x02\x021" + 159 | "\x02\x023\x02\x025\x02\x027\x02\x029\x02\x02;\x02\x02=\x02\x02?\x02\x02" + 160 | "A\x02\x02C\x02\x02E\x02\x02G\x02\x02I\x02\x02K\x02\x02M\x02\x02O\x02\x02" + 161 | "Q\x02\x02S\x02\x02U\x02\x11W\x02\x02Y\x02\x02[\x02\x02]\x02\x02_\x02\x02" + 162 | "a\x02\x02c\x02\x02e\x02\x02g\x02\x02i\x02\x02k\x02\x12m\x02\x13o\x02\x02" + 163 | "q\x02\x14s\x02\x02u\x02\x02w\x02\x02y\x02\x02{\x02\x02}\x02\x02\x7F\x02" + 164 | "\x15\x81\x02\x02\x83\x02\x02\x85\x02\x16\x87\x02\x17\x89\x02\x18\x03\x02" + 165 | "\x18\x04\x02NNnn\x03\x023;\x04\x02ZZzz\x05\x022;CHch\x03\x0229\x04\x02" + 166 | "DDdd\x03\x0223\x04\x02GGgg\x04\x02--//\x06\x02FFHHffhh\x04\x02RRrr\x06" + 167 | "\x02\f\f\x0F\x0F))^^\x06\x02\f\f\x0F\x0F$$^^\n\x02$$))^^ddhhppttvv\x03" + 168 | "\x0225\x06\x02&&C\\aac|\x04\x02\x02\x81\uD802\uDC01\x03\x02\uD802\uDC01" + 169 | "\x03\x02\uDC02\uE001\x07\x02&&2;C\\aac|\x05\x02\v\f\x0E\x0F\"\"\x04\x02" + 170 | "\f\f\x0F\x0F\x02\u0203\x02\x03\x03\x02\x02\x02\x02\x05\x03\x02\x02\x02" + 171 | "\x02\x07\x03\x02\x02\x02\x02\t\x03\x02\x02\x02\x02\v\x03\x02\x02\x02\x02" + 172 | "\r\x03\x02\x02\x02\x02\x0F\x03\x02\x02\x02\x02\x11\x03\x02\x02\x02\x02" + 173 | "\x13\x03\x02\x02\x02\x02\x15\x03\x02\x02\x02\x02\x17\x03\x02\x02\x02\x02" + 174 | "\x19\x03\x02\x02\x02\x02\x1B\x03\x02\x02\x02\x02\x1D\x03\x02\x02\x02\x02" + 175 | "U\x03\x02\x02\x02\x02k\x03\x02\x02\x02\x02m\x03\x02\x02\x02\x02q\x03\x02" + 176 | "\x02\x02\x02\x7F\x03\x02\x02\x02\x02\x85\x03\x02\x02\x02\x02\x87\x03\x02" + 177 | "\x02\x02\x02\x89\x03\x02\x02\x02\x03\x8B\x03\x02\x02\x02\x05\x8D\x03\x02" + 178 | "\x02\x02\x07\x8F\x03\x02\x02\x02\t\x91\x03\x02\x02\x02\v\x93\x03\x02\x02" + 179 | "\x02\r\x95\x03\x02\x02\x02\x0F\x97\x03\x02\x02\x02\x11\x99\x03\x02\x02" + 180 | "\x02\x13\x9B\x03\x02\x02\x02\x15\x9D\x03\x02\x02\x02\x17\xA2\x03\x02\x02" + 181 | "\x02\x19\xA7\x03\x02\x02\x02\x1B\xAD\x03\x02\x02\x02\x1D\xB8\x03\x02\x02" + 182 | "\x02\x1F\xBA\x03\x02\x02\x02!\xBE\x03\x02\x02\x02#\xC2\x03\x02\x02\x02" + 183 | "%\xC6\x03\x02\x02\x02\'\xCA\x03\x02\x02\x02)\xD6\x03\x02\x02\x02+\xD8" + 184 | "\x03\x02\x02\x02-\xE1\x03\x02\x02\x02/\xE3\x03\x02\x02\x021\xE6\x03\x02" + 185 | "\x02\x023\xEC\x03\x02\x02\x025\xEF\x03\x02\x02\x027\xF3\x03\x02\x02\x02" + 186 | "9\xF7\x03\x02\x02\x02;\xFE\x03\x02\x02\x02=\u0101\x03\x02\x02\x02?\u0107" + 187 | "\x03\x02\x02\x02A\u0109\x03\x02\x02\x02C\u010F\x03\x02\x02\x02E\u0116" + 188 | "\x03\x02\x02\x02G\u0119\x03\x02\x02\x02I\u011F\x03\x02\x02\x02K\u0121" + 189 | "\x03\x02\x02\x02M\u0125\x03\x02\x02\x02O\u012C\x03\x02\x02\x02Q\u012F" + 190 | "\x03\x02\x02\x02S\u0135\x03\x02\x02\x02U\u0139\x03\x02\x02\x02W\u0156" + 191 | "\x03\x02\x02\x02Y\u0158\x03\x02\x02\x02[\u015B\x03\x02\x02\x02]\u015E" + 192 | "\x03\x02\x02\x02_\u0162\x03\x02\x02\x02a\u0164\x03\x02\x02\x02c\u0166" + 193 | "\x03\x02\x02\x02e\u0176\x03\x02\x02\x02g\u0178\x03\x02\x02\x02i\u017B" + 194 | "\x03\x02\x02\x02k\u0186\x03\x02\x02\x02m\u0190\x03\x02\x02\x02o\u0192" + 195 | "\x03\x02\x02\x02q\u0194\x03\x02\x02\x02s\u019B\x03\x02\x02\x02u\u01A1" + 196 | "\x03\x02\x02\x02w\u01A7\x03\x02\x02\x02y\u01B4\x03\x02\x02\x02{\u01B6" + 197 | "\x03\x02\x02\x02}\u01B8\x03\x02\x02\x02\x7F\u01C3\x03\x02\x02\x02\x81" + 198 | "\u01CC\x03\x02\x02\x02\x83\u01D2\x03\x02\x02\x02\x85\u01D5\x03\x02\x02" + 199 | "\x02\x87\u01DB\x03\x02\x02\x02\x89\u01E9\x03\x02\x02\x02\x8B\x8C\x07*" + 200 | "\x02\x02\x8C\x04\x03\x02\x02\x02\x8D\x8E\x07+\x02\x02\x8E\x06\x03\x02" + 201 | "\x02\x02\x8F\x90\x07}\x02\x02\x90\b\x03\x02\x02\x02\x91\x92\x07\x7F\x02" + 202 | "\x02\x92\n\x03\x02\x02\x02\x93\x94\x07]\x02\x02\x94\f\x03\x02\x02\x02" + 203 | "\x95\x96\x07_\x02\x02\x96\x0E\x03\x02\x02\x02\x97\x98\x07=\x02\x02\x98" + 204 | "\x10\x03\x02\x02\x02\x99\x9A\x07.\x02\x02\x9A\x12\x03\x02\x02\x02\x9B" + 205 | "\x9C\x070\x02\x02\x9C\x14\x03\x02\x02\x02\x9D\x9E\x07D\x02\x02\x9E\x9F" + 206 | "\x07q\x02\x02\x9F\xA0\x07q\x02\x02\xA0\xA1\x07m\x02\x02\xA1\x16\x03\x02" + 207 | "\x02\x02\xA2\xA3\x07P\x02\x02\xA3\xA4\x07q\x02\x02\xA4\xA5\x07v\x02\x02" + 208 | "\xA5\xA6\x07g\x02\x02\xA6\x18\x03\x02\x02\x02\xA7\xA8\x07R\x02\x02\xA8" + 209 | "\xA9\x07c\x02\x02\xA9\xAA\x07r\x02\x02\xAA\xAB\x07g\x02\x02\xAB\xAC\x07" + 210 | "t\x02\x02\xAC\x1A\x03\x02\x02\x02\xAD\xB1\x05\x81A\x02\xAE\xB0\x05\x83" + 211 | "B\x02\xAF\xAE\x03\x02\x02\x02\xB0\xB3\x03\x02\x02\x02\xB1\xAF\x03\x02" + 212 | "\x02\x02\xB1\xB2\x03\x02\x02\x02\xB2\x1C\x03\x02\x02\x02\xB3\xB1\x03\x02" + 213 | "\x02\x02\xB4\xB9\x05\x1F\x10\x02\xB5\xB9\x05!\x11\x02\xB6\xB9\x05#\x12" + 214 | "\x02\xB7\xB9\x05%\x13\x02\xB8\xB4\x03\x02\x02\x02\xB8\xB5\x03\x02\x02" + 215 | "\x02\xB8\xB6\x03\x02\x02\x02\xB8\xB7\x03\x02\x02\x02\xB9\x1E\x03\x02\x02" + 216 | "\x02\xBA\xBC\x05)\x15\x02\xBB\xBD\x05\'\x14\x02\xBC\xBB\x03\x02\x02\x02" + 217 | "\xBC\xBD\x03\x02\x02\x02\xBD \x03\x02\x02\x02\xBE\xC0\x057\x1C\x02\xBF" + 218 | "\xC1\x05\'\x14\x02\xC0\xBF\x03\x02\x02\x02\xC0\xC1\x03\x02\x02\x02\xC1" + 219 | "\"\x03\x02\x02\x02\xC2\xC4\x05A!\x02\xC3\xC5\x05\'\x14\x02\xC4\xC3\x03" + 220 | "\x02\x02\x02\xC4\xC5\x03\x02\x02\x02\xC5$\x03\x02\x02\x02\xC6\xC8\x05" + 221 | "K&\x02\xC7\xC9\x05\'\x14\x02\xC8\xC7\x03\x02\x02\x02\xC8\xC9\x03\x02\x02" + 222 | "\x02\xC9&\x03\x02\x02\x02\xCA\xCB\t\x02\x02\x02\xCB(\x03\x02\x02\x02\xCC" + 223 | "\xD7\x072\x02\x02\xCD\xD4\x05/\x18\x02\xCE\xD0\x05+\x16\x02\xCF\xCE\x03" + 224 | "\x02\x02\x02\xCF\xD0\x03\x02\x02\x02\xD0\xD5\x03\x02\x02\x02\xD1\xD2\x05" + 225 | "5\x1B\x02\xD2\xD3\x05+\x16\x02\xD3\xD5\x03\x02\x02\x02\xD4\xCF\x03\x02" + 226 | "\x02\x02\xD4\xD1\x03\x02\x02\x02\xD5\xD7\x03\x02\x02\x02\xD6\xCC\x03\x02" + 227 | "\x02\x02\xD6\xCD\x03\x02\x02\x02\xD7*\x03\x02\x02\x02\xD8\xDD\x05-\x17" + 228 | "\x02\xD9\xDB\x051\x19\x02\xDA\xD9\x03\x02\x02\x02\xDA\xDB\x03\x02\x02" + 229 | "\x02\xDB\xDC\x03\x02\x02\x02\xDC\xDE\x05-\x17\x02\xDD\xDA\x03\x02\x02" + 230 | "\x02\xDD\xDE\x03\x02\x02\x02\xDE,\x03\x02\x02\x02\xDF\xE2\x072\x02\x02" + 231 | "\xE0\xE2\x05/\x18\x02\xE1\xDF\x03\x02\x02\x02\xE1\xE0\x03\x02\x02\x02" + 232 | "\xE2.\x03\x02\x02\x02\xE3\xE4\t\x03\x02\x02\xE40\x03\x02\x02\x02\xE5\xE7" + 233 | "\x053\x1A\x02\xE6\xE5\x03\x02\x02\x02\xE7\xE8\x03\x02\x02\x02\xE8\xE6" + 234 | "\x03\x02\x02\x02\xE8\xE9\x03\x02\x02\x02\xE92\x03\x02\x02\x02\xEA\xED" + 235 | "\x05-\x17\x02\xEB\xED\x07a\x02\x02\xEC\xEA\x03\x02\x02\x02\xEC\xEB\x03" + 236 | "\x02\x02\x02\xED4\x03\x02\x02\x02\xEE\xF0\x07a\x02\x02\xEF\xEE\x03\x02" + 237 | "\x02\x02\xF0\xF1\x03\x02\x02\x02\xF1\xEF\x03\x02\x02\x02\xF1\xF2\x03\x02" + 238 | "\x02\x02\xF26\x03\x02\x02\x02\xF3\xF4\x072\x02\x02\xF4\xF5\t\x04\x02\x02" + 239 | "\xF5\xF6\x059\x1D\x02\xF68\x03\x02\x02\x02\xF7\xFC\x05;\x1E\x02\xF8\xFA" + 240 | "\x05=\x1F\x02\xF9\xF8\x03\x02\x02\x02\xF9\xFA\x03\x02\x02\x02\xFA\xFB" + 241 | "\x03\x02\x02\x02\xFB\xFD\x05;\x1E\x02\xFC\xF9\x03\x02\x02\x02\xFC\xFD" + 242 | "\x03\x02\x02\x02\xFD:\x03\x02\x02\x02\xFE\xFF\t\x05\x02\x02\xFF<\x03\x02" + 243 | "\x02\x02\u0100\u0102\x05? \x02\u0101\u0100\x03\x02\x02\x02\u0102\u0103" + 244 | "\x03\x02\x02\x02\u0103\u0101\x03\x02\x02\x02\u0103\u0104\x03\x02\x02\x02" + 245 | "\u0104>\x03\x02\x02\x02\u0105\u0108\x05;\x1E\x02\u0106\u0108\x07a\x02" + 246 | "\x02\u0107\u0105\x03\x02\x02\x02\u0107\u0106\x03\x02\x02\x02\u0108@\x03" + 247 | "\x02\x02\x02\u0109\u010B\x072\x02\x02\u010A\u010C\x055\x1B\x02\u010B\u010A" + 248 | "\x03\x02\x02\x02\u010B\u010C\x03\x02\x02\x02\u010C\u010D\x03\x02\x02\x02" + 249 | "\u010D\u010E\x05C\"\x02\u010EB\x03\x02\x02\x02\u010F\u0114\x05E#\x02\u0110" + 250 | "\u0112\x05G$\x02\u0111\u0110\x03\x02\x02\x02\u0111\u0112\x03\x02\x02\x02" + 251 | "\u0112\u0113\x03\x02\x02\x02\u0113\u0115\x05E#\x02\u0114\u0111\x03\x02" + 252 | "\x02\x02\u0114\u0115\x03\x02\x02\x02\u0115D\x03\x02\x02\x02\u0116\u0117" + 253 | "\t\x06\x02\x02\u0117F\x03\x02\x02\x02\u0118\u011A\x05I%\x02\u0119\u0118" + 254 | "\x03\x02\x02\x02\u011A\u011B\x03\x02\x02\x02\u011B\u0119\x03\x02\x02\x02" + 255 | "\u011B\u011C\x03\x02\x02\x02\u011CH\x03\x02\x02\x02\u011D\u0120\x05E#" + 256 | "\x02\u011E\u0120\x07a\x02\x02\u011F\u011D\x03\x02\x02\x02\u011F\u011E" + 257 | "\x03\x02\x02\x02\u0120J\x03\x02\x02\x02\u0121\u0122\x072\x02\x02\u0122" + 258 | "\u0123\t\x07\x02\x02\u0123\u0124\x05M\'\x02\u0124L\x03\x02\x02\x02\u0125" + 259 | "\u012A\x05O(\x02\u0126\u0128\x05Q)\x02\u0127\u0126\x03\x02\x02\x02\u0127" + 260 | "\u0128\x03\x02\x02\x02\u0128\u0129\x03\x02\x02\x02\u0129\u012B\x05O(\x02" + 261 | "\u012A\u0127\x03\x02\x02\x02\u012A\u012B\x03\x02\x02\x02\u012BN\x03\x02" + 262 | "\x02\x02\u012C\u012D\t\b\x02\x02\u012DP\x03\x02\x02\x02\u012E\u0130\x05" + 263 | "S*\x02\u012F\u012E\x03\x02\x02\x02\u0130\u0131\x03\x02\x02\x02\u0131\u012F" + 264 | "\x03\x02\x02\x02\u0131\u0132\x03\x02\x02\x02\u0132R\x03\x02\x02\x02\u0133" + 265 | "\u0136\x05O(\x02\u0134\u0136\x07a\x02\x02\u0135\u0133\x03\x02\x02\x02" + 266 | "\u0135\u0134\x03\x02\x02\x02\u0136T\x03\x02\x02\x02\u0137\u013A\x05W," + 267 | "\x02\u0138\u013A\x05c2\x02\u0139\u0137\x03\x02\x02\x02\u0139\u0138\x03" + 268 | "\x02\x02\x02\u013AV\x03\x02\x02\x02\u013B\u013C\x05+\x16\x02\u013C\u013E" + 269 | "\x070\x02\x02\u013D\u013F\x05+\x16\x02\u013E\u013D\x03\x02\x02\x02\u013E" + 270 | "\u013F\x03\x02\x02\x02\u013F\u0141\x03\x02\x02\x02\u0140\u0142\x05Y-\x02" + 271 | "\u0141\u0140\x03\x02\x02\x02\u0141\u0142\x03\x02\x02\x02\u0142\u0144\x03" + 272 | "\x02\x02\x02\u0143\u0145\x05a1\x02\u0144\u0143\x03\x02\x02\x02\u0144\u0145" + 273 | "\x03\x02\x02\x02\u0145\u0157\x03\x02\x02\x02\u0146\u0147\x070\x02\x02" + 274 | "\u0147\u0149\x05+\x16\x02\u0148\u014A\x05Y-\x02\u0149\u0148\x03\x02\x02" + 275 | "\x02\u0149\u014A\x03\x02\x02\x02\u014A\u014C\x03\x02\x02\x02\u014B\u014D" + 276 | "\x05a1\x02\u014C\u014B\x03\x02\x02\x02\u014C\u014D\x03\x02\x02\x02\u014D" + 277 | "\u0157\x03\x02\x02\x02\u014E\u014F\x05+\x16\x02\u014F\u0151\x05Y-\x02" + 278 | "\u0150\u0152\x05a1\x02\u0151\u0150\x03\x02\x02\x02\u0151\u0152\x03\x02" + 279 | "\x02\x02\u0152\u0157\x03\x02\x02\x02\u0153\u0154\x05+\x16\x02\u0154\u0155" + 280 | "\x05a1\x02\u0155\u0157\x03\x02\x02\x02\u0156\u013B\x03\x02\x02\x02\u0156" + 281 | "\u0146\x03\x02\x02\x02\u0156\u014E\x03\x02\x02\x02\u0156\u0153\x03\x02" + 282 | "\x02\x02\u0157X\x03\x02\x02\x02\u0158\u0159\x05[.\x02\u0159\u015A\x05" + 283 | "]/\x02\u015AZ\x03\x02\x02\x02\u015B\u015C\t\t\x02\x02\u015C\\\x03\x02" + 284 | "\x02\x02\u015D\u015F\x05_0\x02\u015E\u015D\x03\x02\x02\x02\u015E\u015F" + 285 | "\x03\x02\x02\x02\u015F\u0160\x03\x02\x02\x02\u0160\u0161\x05+\x16\x02" + 286 | "\u0161^\x03\x02\x02\x02\u0162\u0163\t\n\x02\x02\u0163`\x03\x02\x02\x02" + 287 | "\u0164\u0165\t\v\x02\x02\u0165b\x03\x02\x02\x02\u0166\u0167\x05e3\x02" + 288 | "\u0167\u0169\x05g4\x02\u0168\u016A\x05a1\x02\u0169\u0168\x03\x02\x02\x02" + 289 | "\u0169\u016A\x03\x02\x02\x02\u016Ad\x03\x02\x02\x02\u016B\u016D\x057\x1C" + 290 | "\x02\u016C\u016E\x070\x02\x02\u016D\u016C\x03\x02\x02\x02\u016D\u016E" + 291 | "\x03\x02\x02\x02\u016E\u0177\x03\x02\x02\x02\u016F\u0170\x072\x02\x02" + 292 | "\u0170\u0172\t\x04\x02\x02\u0171\u0173\x059\x1D\x02\u0172\u0171\x03\x02" + 293 | "\x02\x02\u0172\u0173\x03\x02\x02\x02\u0173\u0174\x03\x02\x02\x02\u0174" + 294 | "\u0175\x070\x02\x02\u0175\u0177\x059\x1D\x02\u0176\u016B\x03\x02\x02\x02" + 295 | "\u0176\u016F\x03\x02\x02\x02\u0177f\x03\x02\x02\x02\u0178\u0179\x05i5" + 296 | "\x02\u0179\u017A\x05]/\x02\u017Ah\x03\x02\x02\x02\u017B\u017C\t\f\x02" + 297 | "\x02\u017Cj\x03\x02\x02\x02\u017D\u017E\x07v\x02\x02\u017E\u017F\x07t" + 298 | "\x02\x02\u017F\u0180\x07w\x02\x02\u0180\u0187\x07g\x02\x02\u0181\u0182" + 299 | "\x07h\x02\x02\u0182\u0183\x07c\x02\x02\u0183\u0184\x07n\x02\x02\u0184" + 300 | "\u0185\x07u\x02\x02\u0185\u0187\x07g\x02\x02\u0186\u017D\x03\x02\x02\x02" + 301 | "\u0186\u0181\x03\x02\x02\x02\u0187l\x03\x02\x02\x02\u0188\u0189\x07)\x02" + 302 | "\x02\u0189\u018A\x05o8\x02\u018A\u018B\x07)\x02\x02\u018B\u0191\x03\x02" + 303 | "\x02\x02\u018C\u018D\x07)\x02\x02\u018D\u018E\x05w<\x02\u018E\u018F\x07" + 304 | ")\x02\x02\u018F\u0191\x03\x02\x02\x02\u0190\u0188\x03\x02\x02\x02\u0190" + 305 | "\u018C\x03\x02\x02\x02\u0191n\x03\x02\x02\x02\u0192\u0193\n\r\x02\x02" + 306 | "\u0193p\x03\x02\x02\x02\u0194\u0196\x07$\x02\x02\u0195\u0197\x05s:\x02" + 307 | "\u0196\u0195\x03\x02\x02\x02\u0196\u0197\x03\x02\x02\x02\u0197\u0198\x03" + 308 | "\x02\x02\x02\u0198\u0199\x07$\x02\x02\u0199r\x03\x02\x02\x02\u019A\u019C" + 309 | "\x05u;\x02\u019B\u019A\x03\x02\x02\x02\u019C\u019D\x03\x02\x02\x02\u019D" + 310 | "\u019B\x03\x02\x02\x02\u019D\u019E\x03\x02\x02\x02\u019Et\x03\x02\x02" + 311 | "\x02\u019F\u01A2\n\x0E\x02\x02\u01A0\u01A2\x05w<\x02\u01A1\u019F\x03\x02" + 312 | "\x02\x02\u01A1\u01A0\x03\x02\x02\x02\u01A2v\x03\x02\x02\x02\u01A3\u01A4" + 313 | "\x07^\x02\x02\u01A4\u01A8\t\x0F\x02\x02\u01A5\u01A8\x05y=\x02\u01A6\u01A8" + 314 | "\x05}?\x02\u01A7\u01A3\x03\x02\x02\x02\u01A7\u01A5\x03\x02\x02\x02\u01A7" + 315 | "\u01A6\x03\x02\x02\x02\u01A8x\x03\x02\x02\x02\u01A9\u01AA\x07^\x02\x02" + 316 | "\u01AA\u01B5\x05E#\x02\u01AB\u01AC\x07^\x02\x02\u01AC\u01AD\x05E#\x02" + 317 | "\u01AD\u01AE\x05E#\x02\u01AE\u01B5\x03\x02\x02\x02\u01AF\u01B0\x07^\x02" + 318 | "\x02\u01B0\u01B1\x05{>\x02\u01B1\u01B2\x05E#\x02\u01B2\u01B3\x05E#\x02" + 319 | "\u01B3\u01B5\x03\x02\x02\x02\u01B4\u01A9\x03\x02\x02\x02\u01B4\u01AB\x03" + 320 | "\x02\x02\x02\u01B4\u01AF\x03\x02\x02\x02\u01B5z\x03\x02\x02\x02\u01B6" + 321 | "\u01B7\t\x10\x02\x02\u01B7|\x03\x02\x02\x02\u01B8\u01BA\x07^\x02\x02\u01B9" + 322 | "\u01BB\x07w\x02\x02\u01BA\u01B9\x03\x02\x02\x02\u01BB\u01BC\x03\x02\x02" + 323 | "\x02\u01BC\u01BA\x03\x02\x02\x02\u01BC\u01BD\x03\x02\x02\x02\u01BD\u01BE" + 324 | "\x03\x02\x02\x02\u01BE\u01BF\x05;\x1E\x02\u01BF\u01C0\x05;\x1E\x02\u01C0" + 325 | "\u01C1\x05;\x1E\x02\u01C1\u01C2\x05;\x1E\x02\u01C2~\x03\x02\x02\x02\u01C3" + 326 | "\u01C4\x07p\x02\x02\u01C4\u01C5\x07w\x02\x02\u01C5\u01C6\x07n\x02\x02" + 327 | "\u01C6\u01C7\x07n\x02\x02\u01C7\x80\x03\x02\x02\x02\u01C8\u01CD\t\x11" + 328 | "\x02\x02\u01C9\u01CD\n\x12\x02\x02\u01CA\u01CB\t\x13\x02\x02\u01CB\u01CD" + 329 | "\t\x14\x02\x02\u01CC\u01C8\x03\x02\x02\x02\u01CC\u01C9\x03\x02\x02\x02" + 330 | "\u01CC\u01CA\x03\x02\x02\x02\u01CD\x82\x03\x02\x02\x02\u01CE\u01D3\t\x15" + 331 | "\x02\x02\u01CF\u01D3\n\x12\x02\x02\u01D0\u01D1\t\x13\x02\x02\u01D1\u01D3" + 332 | "\t\x14\x02\x02\u01D2\u01CE\x03\x02\x02\x02\u01D2\u01CF\x03\x02\x02\x02" + 333 | "\u01D2\u01D0\x03\x02\x02\x02\u01D3\x84\x03\x02\x02\x02\u01D4\u01D6\t\x16" + 334 | "\x02\x02\u01D5\u01D4\x03\x02\x02\x02\u01D6\u01D7\x03\x02\x02\x02\u01D7" + 335 | "\u01D5\x03\x02\x02\x02\u01D7\u01D8\x03\x02\x02\x02\u01D8\u01D9\x03\x02" + 336 | "\x02\x02\u01D9\u01DA\bC\x02\x02\u01DA\x86\x03\x02\x02\x02\u01DB\u01DC" + 337 | "\x071\x02\x02\u01DC\u01DD\x07,\x02\x02\u01DD\u01E1\x03\x02\x02\x02\u01DE" + 338 | "\u01E0\v\x02\x02\x02\u01DF\u01DE\x03\x02\x02\x02\u01E0\u01E3\x03\x02\x02" + 339 | "\x02\u01E1\u01E2\x03\x02\x02\x02\u01E1\u01DF\x03\x02\x02\x02\u01E2\u01E4" + 340 | "\x03\x02\x02\x02\u01E3\u01E1\x03\x02\x02\x02\u01E4\u01E5\x07,\x02\x02" + 341 | "\u01E5\u01E6\x071\x02\x02\u01E6\u01E7\x03\x02\x02\x02\u01E7\u01E8\bD\x03" + 342 | "\x02\u01E8\x88\x03\x02\x02\x02\u01E9\u01EA\x071\x02\x02\u01EA\u01EB\x07" + 343 | "1\x02\x02\u01EB\u01EF\x03\x02\x02\x02\u01EC\u01EE\n\x17\x02\x02\u01ED" + 344 | "\u01EC\x03\x02\x02\x02\u01EE\u01F1\x03\x02\x02\x02\u01EF\u01ED\x03\x02" + 345 | "\x02\x02\u01EF\u01F0\x03\x02\x02\x02\u01F0\u01F2\x03\x02\x02\x02\u01F1" + 346 | "\u01EF\x03\x02\x02\x02\u01F2\u01F3\bE\x03\x02\u01F3\x8A\x03\x02\x02\x02" + 347 | "9\x02\xB1\xB8\xBC\xC0\xC4\xC8\xCF\xD4\xD6\xDA\xDD\xE1\xE8\xEC\xF1\xF9" + 348 | "\xFC\u0103\u0107\u010B\u0111\u0114\u011B\u011F\u0127\u012A\u0131\u0135" + 349 | "\u0139\u013E\u0141\u0144\u0149\u014C\u0151\u0156\u015E\u0169\u016D\u0172" + 350 | "\u0176\u0186\u0190\u0196\u019D\u01A1\u01A7\u01B4\u01BC\u01CC\u01D2\u01D7" + 351 | "\u01E1\u01EF\x04\b\x02\x02\x02\x03\x02"; 352 | public static __ATN: ATN; 353 | public static get _ATN(): ATN { 354 | if (!ComposeLexer.__ATN) { 355 | ComposeLexer.__ATN = new ATNDeserializer().deserialize(Utils.toCharArray(ComposeLexer._serializedATN)); 356 | } 357 | 358 | return ComposeLexer.__ATN; 359 | } 360 | 361 | } 362 | 363 | --------------------------------------------------------------------------------