From fdd36c8103c2236618d09e725858a27c51353c36 Mon Sep 17 00:00:00 2001 From: goropikari Date: Mon, 12 Sep 2022 00:08:19 +0900 Subject: [PATCH] change regex rule format --- compiler/generator/generator_test.go | 6 +- compiler/generator/parser.go | 114 +- compiler/generator/parser_test.go | 79 ++ compiler/regexp/lexer.go | 162 ++- compiler/regexp/lexer_test.go | 80 +- sample/main.go | 1572 +++++++++++++------------- sample/sample.l | 26 +- sample/word_counter/main.go | 54 +- sample/word_counter/wc.l | 6 +- 9 files changed, 1228 insertions(+), 871 deletions(-) create mode 100644 compiler/generator/parser_test.go diff --git a/compiler/generator/generator_test.go b/compiler/generator/generator_test.go index ab67cce..d706ea1 100644 --- a/compiler/generator/generator_test.go +++ b/compiler/generator/generator_test.go @@ -199,9 +199,9 @@ func TestDot(t *testing.T) { "[ \t\n\r]*", "\\(", "\\)", - "{", - "}", - "\\+|\\-|\\*|/|:=|==|!=", + "\\{", + "\\}", + "\\+|\\-|\\*|\\/|:=|==|!=", ".", }, ). diff --git a/compiler/generator/parser.go b/compiler/generator/parser.go index 0810456..f52e8e6 100644 --- a/compiler/generator/parser.go +++ b/compiler/generator/parser.go @@ -34,9 +34,15 @@ func (p *Parser) Parse() (def string, rules [][]string, userCode string) { } func (p *Parser) parseRules(ruleStr string) [][]string { - buf := bytes.NewBufferString("\n" + ruleStr) + buf := bytes.NewBufferString(ruleStr) rules := make([][]string, 0) for { + if err := skipWhitespace(buf); err != nil { + if errors.Is(err, io.EOF) { + return rules + } + panic(err) + } rule := p.readRule(buf) blk := p.readBlock(buf) if blk == "" { @@ -48,72 +54,86 @@ func (p *Parser) parseRules(ruleStr string) [][]string { return rules } -func (p *Parser) readRule(reader io.RuneReader) string { - var prev rune +func skipWhitespace(reader io.RuneScanner) error { for { r, _, err := reader.ReadRune() if err != nil { - if errors.Is(err, io.EOF) { - return "" - } - panic(err) + return err } - if prev == '\n' && r == '"' { - break + switch r { + case '\n', '\r', '\t', ' ': + continue + } + if err := reader.UnreadRune(); err != nil { + return err } - prev = r + break } + return nil +} + +func (p *Parser) readRule(reader io.RuneScanner) string { + inRange := false rs := make([]rune, 0) for { r, _, err := reader.ReadRune() if err != nil { - if errors.Is(err, io.EOF) { - break - } panic(err) } switch r { - case '\\': - if prev == '\\' { - rs = append(rs, r) - prev = 0 - continue - } - prev = r - continue - case 'n': - if prev == '\\' { - rs = append(rs, '\n') - prev = 0 - continue - } - case 'r': - if prev == '\\' { - rs = append(rs, '\r') - prev = 0 - continue - } - case 't': - if prev == '\\' { - rs = append(rs, '\t') - prev = 0 - continue - } case '"': - if prev == '\\' { - prev = r - rs = append(rs, r) - continue + rs = append(rs, r) + for { + r, _, err = reader.ReadRune() + if err != nil { + panic(err) + } + + switch r { + case '\\': + nr, err := nextRune(reader) + if err != nil { + panic(err) + } + reader.ReadRune() + if nr == '"' { + rs = append(rs, '\\') + rs = append(rs, '"') + } + case '"': + rs = append(rs, r) + return string(rs) + default: + rs = append(rs, r) + } } - + case '[': + inRange = true + case ']': + inRange = false + case ' ': + if !inRange { + return string(rs) + } + case '\t': return string(rs) } - prev = r + rs = append(rs, r) } - return "" +} + +func nextRune(reader io.RuneScanner) (rune, error) { + r, _, err := reader.ReadRune() + if err != nil { + return 0, err + } + if err := reader.UnreadRune(); err != nil { + return 0, err + } + return r, nil } func (p *Parser) readBlock(reader io.RuneReader) string { @@ -163,7 +183,7 @@ func (p *Parser) Split() (def string, rules string, userCode string) { def = p.readUntil(p.r, "%}\n") - p.readUntil(p.r, "%%\n") + _ = p.readUntil(p.r, "%%\n") rules = p.readUntil(p.r, "%%\n") var buf bytes.Buffer diff --git a/compiler/generator/parser_test.go b/compiler/generator/parser_test.go new file mode 100644 index 0000000..4537735 --- /dev/null +++ b/compiler/generator/parser_test.go @@ -0,0 +1,79 @@ +package generator_test + +import ( + "bufio" + "bytes" + "fmt" + "testing" + + "github.com/goropikari/tlex/compiler/generator" +) + +func TestParser(t *testing.T) { + tests := []struct { + name string + given string + }{ + { + name: "parser test", + given: ` +%{ + +import ( + "fmt" + "log" + "bytes" +) + +// generated lexer returned types are (int, error). +const ( + Keyword int = iota + 1 + Type + Identifier + Digit + Whitespace + LParen + RParen + LBracket + RBracket + Operator + Hiragana +) + +%} + +%% +if|for|while|func|return { return Keyword, nil } +int|float64 { return Type, nil } +[a-zA-Z][a-zA-Z0-9]* { return Identifier, nil } +[1-9][0-9]* { return Digit, nil } +[ \t\n\r]* { } +"(" { return LParen, nil } +")" { return RParen, nil } +"{" { return LBracket, nil } +"}" { return RBracket, nil } +"+" { return Operator, nil } +"-" { return Operator, nil } +"*" { return Operator, nil } +"/" { return Operator, nil } +":=" { return Operator, nil } +"==" { return Operator, nil } +"!=" { return Operator, nil } +[ぁ-ゔ]* { return Hiragana, nil } +. {} +%% + +user defined code +`, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + r := bytes.NewBufferString(tt.given) + p := generator.NewParser(bufio.NewReader(r)) + def, rules, userCode := p.Parse() + fmt.Println(def, rules, userCode) + }) + } +} diff --git a/compiler/regexp/lexer.go b/compiler/regexp/lexer.go index 91c437e..90ece58 100644 --- a/compiler/regexp/lexer.go +++ b/compiler/regexp/lexer.go @@ -20,8 +20,12 @@ const ( RParenTokenType LSqBracketTokenType RSqBracketTokenType + LCurryBracketTokenType + RCurryBracketTokenType BarTokenType NegationTokenType + DigitTokenType + CommaTokenType ) type Token struct { @@ -59,13 +63,6 @@ func (lex *Lexer) peek() (rune, error) { return lex.regexp[lex.pos], nil } -// func (lex *Lexer) next() (rune, error) { -// if lex.pos+1 >= lex.length { -// return 0, io.EOF -// } -// return lex.regexp[lex.pos+1], nil -// } - func (lex *Lexer) read() (rune, error) { b, err := lex.peek() if err != nil { @@ -81,22 +78,44 @@ func (lex *Lexer) advance() { } func (lex *Lexer) Scan() []Token { + r, err := lex.peek() + if errors.Is(err, io.EOF) { + return lex.tokens + } + + if r == '"' { + return lex.scanStringLiteral() + } + for { - b, err := lex.read() + var typ TokenType + r, err := lex.read() if errors.Is(err, io.EOF) { return lex.tokens } - - var typ TokenType - switch b { + switch r { case '\\': - b2, err := lex.read() + r2, err := lex.read() if errors.Is(err, io.EOF) { panic(ErrInvalidRegex) } - switch b2 { - case '.', '+', '-', '*', '(', ')', '[', ']': - b = b2 + switch r2 { + case 'a': + r = '\a' + case 'b': + r = '\b' + case 'f': + r = '\f' + case 'n': + r = '\n' + case 'r': + r = '\r' + case 't': + r = '\t' + case 'v': + r = '\v' + case '.', '+', '-', '*', '/', '(', ')', '[', ']', '{', '}', '\\': + r = r2 default: panic(ErrInvalidRegex) } @@ -110,13 +129,13 @@ func (lex *Lexer) Scan() []Token { case ')': typ = RParenTokenType case '[': - lex.tokens = append(lex.tokens, NewToken(LSqBracketTokenType, b)) - b2, err := lex.read() + lex.tokens = append(lex.tokens, NewToken(LSqBracketTokenType, r)) + r2, err := lex.read() if errors.Is(err, io.EOF) { panic(ErrInvalidRegex) } - b = b2 - switch b { + r = r2 + switch r { case '^': typ = NegationTokenType default: @@ -124,6 +143,32 @@ func (lex *Lexer) Scan() []Token { } case ']': typ = RSqBracketTokenType + case '{': + lex.tokens = append(lex.tokens, NewToken(LCurryBracketTokenType, r)) + lower := lex.scanDigit() + lex.tokens = append(lex.tokens, NewToken(DigitTokenType, rune(lower))) + r, err = lex.read() + if err != nil { + panic(err) + } + if r == ',' { + lex.tokens = append(lex.tokens, NewToken(CommaTokenType, r)) + upper := lex.scanDigit() + lex.tokens = append(lex.tokens, NewToken(DigitTokenType, rune(upper))) + r, err = lex.read() + if err != nil { + panic(err) + } + if r == '}' { + typ = RCurryBracketTokenType + } else { + panic(ErrInvalidRegex) + } + } else if r == '}' { + typ = RCurryBracketTokenType + } else { + panic(ErrInvalidRegex) + } case '|': typ = BarTokenType case '.': @@ -131,6 +176,83 @@ func (lex *Lexer) Scan() []Token { default: typ = SymbolTokenType } - lex.tokens = append(lex.tokens, NewToken(typ, b)) + lex.tokens = append(lex.tokens, NewToken(typ, r)) + } +} + +func (lex *Lexer) scanDigit() int { + num := 0 + for { + r, err := lex.peek() + if err != nil { + panic(err) + } + if '0' <= r && r <= '9' { + num = num*10 + int(r-'0') + } else { + return num + } + lex.read() + } +} + +func (lex *Lexer) scanStringLiteral() []Token { + _, err := lex.read() + if err != nil { + panic(err) + } + var prev rune + tokens := make([]Token, 0) + for { + r, err := lex.read() + if err != nil { + panic(err) + } + switch prev { + case '\\': + switch r { + case 'a': + tokens = append(tokens, NewToken(SymbolTokenType, '\a')) + r = '\a' + case 'b': + tokens = append(tokens, NewToken(SymbolTokenType, '\b')) + r = '\b' + case 'f': + tokens = append(tokens, NewToken(SymbolTokenType, '\f')) + r = '\f' + case 'n': + tokens = append(tokens, NewToken(SymbolTokenType, '\n')) + r = '\n' + case 'r': + tokens = append(tokens, NewToken(SymbolTokenType, '\r')) + r = '\r' + case 't': + tokens = append(tokens, NewToken(SymbolTokenType, '\t')) + r = '\t' + case 'v': + tokens = append(tokens, NewToken(SymbolTokenType, '\v')) + r = '\v' + case '0': + tokens = append(tokens, NewToken(SymbolTokenType, 0)) + r = 0 + case '\\': + tokens = append(tokens, NewToken(SymbolTokenType, '\\')) + r = -1 + case '"': + tokens = append(tokens, NewToken(SymbolTokenType, '"')) + r = -1 + } + default: + switch r { + case '"': + return tokens + case '\\': + break + default: + tokens = append(tokens, NewToken(SymbolTokenType, r)) + } + } + + prev = r } } diff --git a/compiler/regexp/lexer_test.go b/compiler/regexp/lexer_test.go index 7a0f3b9..92983b0 100644 --- a/compiler/regexp/lexer_test.go +++ b/compiler/regexp/lexer_test.go @@ -15,7 +15,7 @@ func TestLexer_Scan(t *testing.T) { }{ { name: "lexer test", - regex: "a(b|c*)de\t\n[a-z][^A-Z]\\+\\-\\*/", + regex: `a(b|c*)de\t\n[a-z][^A-Z]\+\-\*\/`, expected: []regexp.Token{ regexp.NewToken(regexp.SymbolTokenType, 'a'), regexp.NewToken(regexp.LParenTokenType, '('), @@ -45,6 +45,84 @@ func TestLexer_Scan(t *testing.T) { regexp.NewToken(regexp.SymbolTokenType, '/'), }, }, + { + name: "lexer string literal", + regex: `"hoge\"piyo[xyz]ab*"`, + expected: []regexp.Token{ + regexp.NewToken(regexp.SymbolTokenType, 'h'), + regexp.NewToken(regexp.SymbolTokenType, 'o'), + regexp.NewToken(regexp.SymbolTokenType, 'g'), + regexp.NewToken(regexp.SymbolTokenType, 'e'), + regexp.NewToken(regexp.SymbolTokenType, '"'), + regexp.NewToken(regexp.SymbolTokenType, 'p'), + regexp.NewToken(regexp.SymbolTokenType, 'i'), + regexp.NewToken(regexp.SymbolTokenType, 'y'), + regexp.NewToken(regexp.SymbolTokenType, 'o'), + regexp.NewToken(regexp.SymbolTokenType, '['), + regexp.NewToken(regexp.SymbolTokenType, 'x'), + regexp.NewToken(regexp.SymbolTokenType, 'y'), + regexp.NewToken(regexp.SymbolTokenType, 'z'), + regexp.NewToken(regexp.SymbolTokenType, ']'), + regexp.NewToken(regexp.SymbolTokenType, 'a'), + regexp.NewToken(regexp.SymbolTokenType, 'b'), + regexp.NewToken(regexp.SymbolTokenType, '*'), + }, + }, + { + name: "alternation", + regex: `if|for|while`, + expected: []regexp.Token{ + regexp.NewToken(regexp.SymbolTokenType, 'i'), + regexp.NewToken(regexp.SymbolTokenType, 'f'), + regexp.NewToken(regexp.BarTokenType, '|'), + regexp.NewToken(regexp.SymbolTokenType, 'f'), + regexp.NewToken(regexp.SymbolTokenType, 'o'), + regexp.NewToken(regexp.SymbolTokenType, 'r'), + regexp.NewToken(regexp.BarTokenType, '|'), + regexp.NewToken(regexp.SymbolTokenType, 'w'), + regexp.NewToken(regexp.SymbolTokenType, 'h'), + regexp.NewToken(regexp.SymbolTokenType, 'i'), + regexp.NewToken(regexp.SymbolTokenType, 'l'), + regexp.NewToken(regexp.SymbolTokenType, 'e'), + }, + }, + { + name: "character class", + regex: `a[ \t\n\r]*b`, + expected: []regexp.Token{ + regexp.NewToken(regexp.SymbolTokenType, 'a'), + regexp.NewToken(regexp.LSqBracketTokenType, '['), + regexp.NewToken(regexp.SymbolTokenType, ' '), + regexp.NewToken(regexp.SymbolTokenType, '\t'), + regexp.NewToken(regexp.SymbolTokenType, '\n'), + regexp.NewToken(regexp.SymbolTokenType, '\r'), + regexp.NewToken(regexp.RSqBracketTokenType, ']'), + regexp.NewToken(regexp.StarTokenType, '*'), + regexp.NewToken(regexp.SymbolTokenType, 'b'), + }, + }, + { + name: "curry bracket", + regex: `a{123}`, + expected: []regexp.Token{ + regexp.NewToken(regexp.SymbolTokenType, 'a'), + regexp.NewToken(regexp.LCurryBracketTokenType, '{'), + regexp.NewToken(regexp.DigitTokenType, rune(123)), + regexp.NewToken(regexp.RCurryBracketTokenType, '}'), + }, + }, + { + name: "curry bracket two arguments", + regex: `a{2,10}`, + expected: []regexp.Token{ + regexp.NewToken(regexp.SymbolTokenType, 'a'), + regexp.NewToken(regexp.LCurryBracketTokenType, '{'), + regexp.NewToken(regexp.DigitTokenType, rune(2)), + regexp.NewToken(regexp.CommaTokenType, ','), + regexp.NewToken(regexp.DigitTokenType, rune(10)), + regexp.NewToken(regexp.RCurryBracketTokenType, '}'), + }, + }, } for _, tt := range tests { diff --git a/sample/main.go b/sample/main.go index cfbaed2..2196413 100644 --- a/sample/main.go +++ b/sample/main.go @@ -37,34 +37,42 @@ var ( var yyStateIDToRegexID = []yyRegexID{ 0, // state 0 is dead state 5, + 4, 3, 3, 1, 3, + 17, + 5, 3, - 10, 3, + 16, + 14, 3, 3, - 12, - 12, - 4, - 5, 3, 3, - 8, 3, + 18, + 18, + 3, + 9, 6, - 11, + 12, 7, - 9, - 3, + 13, 3, + 18, 3, + 8, 3, - 2, + 10, + 11, + 18, 3, 3, + 2, + 15, 3, 3, 3, @@ -108,6 +116,14 @@ var yyFinStates = map[yyStateID]struct{}{ 32: {}, 33: {}, 34: {}, + 35: {}, + 36: {}, + 37: {}, + 38: {}, + 39: {}, + 40: {}, + 41: {}, + 42: {}, } type yyinterval struct { @@ -121,796 +137,802 @@ func (x yyinterval) overlap(y yyinterval) bool { var yyTransitionTable = map[yyStateID]map[yyinterval]yyStateID{ 1: { - yyinterval{l: 33, r: 33}: 11, - yyinterval{l: 34, r: 39}: 12, - yyinterval{l: 120, r: 122}: 2, - yyinterval{l: 103, r: 103}: 2, - yyinterval{l: 106, r: 107}: 2, - yyinterval{l: 109, r: 109}: 2, - yyinterval{l: 123, r: 123}: 17, - yyinterval{l: 62, r: 64}: 12, - yyinterval{l: 97, r: 97}: 2, - yyinterval{l: 108, r: 108}: 2, - yyinterval{l: 114, r: 114}: 15, - yyinterval{l: 118, r: 118}: 2, - yyinterval{l: 116, r: 116}: 2, - yyinterval{l: 59, r: 60}: 12, - yyinterval{l: 13, r: 13}: 14, - yyinterval{l: 54, r: 54}: 13, - yyinterval{l: 117, r: 117}: 2, - yyinterval{l: 12353, r: 12436}: 20, - yyinterval{l: 44, r: 44}: 12, - yyinterval{l: 0, r: 8}: 12, - yyinterval{l: 126, r: 12352}: 12, - yyinterval{l: 124, r: 124}: 12, - yyinterval{l: 45, r: 45}: 7, - yyinterval{l: 98, r: 98}: 2, - yyinterval{l: 104, r: 104}: 2, - yyinterval{l: 47, r: 47}: 7, - yyinterval{l: 9, r: 9}: 14, - yyinterval{l: 10, r: 10}: 14, - yyinterval{l: 32, r: 32}: 14, - yyinterval{l: 115, r: 115}: 2, - yyinterval{l: 119, r: 119}: 16, - yyinterval{l: 55, r: 57}: 13, - yyinterval{l: 65, r: 90}: 2, - yyinterval{l: 58, r: 58}: 11, - yyinterval{l: 49, r: 51}: 13, - yyinterval{l: 42, r: 42}: 7, - yyinterval{l: 91, r: 96}: 12, - yyinterval{l: 41, r: 41}: 21, - yyinterval{l: 43, r: 43}: 7, - yyinterval{l: 101, r: 101}: 2, - yyinterval{l: 53, r: 53}: 13, - yyinterval{l: 100, r: 100}: 2, - yyinterval{l: 61, r: 61}: 11, - yyinterval{l: 12437, r: 1114111}: 12, - yyinterval{l: 112, r: 113}: 2, - yyinterval{l: 110, r: 110}: 2, - yyinterval{l: 99, r: 99}: 2, - yyinterval{l: 48, r: 48}: 12, - yyinterval{l: 111, r: 111}: 2, - yyinterval{l: 46, r: 46}: 12, - yyinterval{l: 11, r: 12}: 12, - yyinterval{l: 125, r: 125}: 22, - yyinterval{l: 52, r: 52}: 13, - yyinterval{l: 105, r: 105}: 18, - yyinterval{l: 102, r: 102}: 23, - yyinterval{l: 40, r: 40}: 19, - yyinterval{l: 14, r: 31}: 12, + yyinterval{l: 13, r: 13}: 8, + yyinterval{l: 105, r: 105}: 26, + yyinterval{l: 103, r: 103}: 3, + yyinterval{l: 101, r: 101}: 3, + yyinterval{l: 116, r: 116}: 3, + yyinterval{l: 99, r: 99}: 3, + yyinterval{l: 97, r: 97}: 3, + yyinterval{l: 40, r: 40}: 22, + yyinterval{l: 58, r: 58}: 19, + yyinterval{l: 110, r: 110}: 3, + yyinterval{l: 10, r: 10}: 8, + yyinterval{l: 108, r: 108}: 3, + yyinterval{l: 41, r: 41}: 24, + yyinterval{l: 53, r: 53}: 2, + yyinterval{l: 48, r: 48}: 18, + yyinterval{l: 32, r: 32}: 8, + yyinterval{l: 44, r: 44}: 18, + yyinterval{l: 119, r: 119}: 30, + yyinterval{l: 91, r: 96}: 18, + yyinterval{l: 111, r: 111}: 3, + yyinterval{l: 98, r: 98}: 3, + yyinterval{l: 125, r: 125}: 21, + yyinterval{l: 109, r: 109}: 3, + yyinterval{l: 52, r: 52}: 2, + yyinterval{l: 0, r: 8}: 18, + yyinterval{l: 123, r: 123}: 29, + yyinterval{l: 118, r: 118}: 3, + yyinterval{l: 12437, r: 1114111}: 18, + yyinterval{l: 9, r: 9}: 8, + yyinterval{l: 34, r: 39}: 18, + yyinterval{l: 65, r: 90}: 3, + yyinterval{l: 47, r: 47}: 25, + yyinterval{l: 115, r: 115}: 3, + yyinterval{l: 124, r: 124}: 18, + yyinterval{l: 112, r: 113}: 3, + yyinterval{l: 117, r: 117}: 3, + yyinterval{l: 55, r: 57}: 2, + yyinterval{l: 43, r: 43}: 31, + yyinterval{l: 104, r: 104}: 3, + yyinterval{l: 11, r: 12}: 18, + yyinterval{l: 46, r: 46}: 18, + yyinterval{l: 126, r: 12352}: 18, + yyinterval{l: 120, r: 122}: 3, + yyinterval{l: 42, r: 42}: 23, + yyinterval{l: 59, r: 60}: 18, + yyinterval{l: 102, r: 102}: 20, + yyinterval{l: 54, r: 54}: 2, + yyinterval{l: 49, r: 51}: 2, + yyinterval{l: 100, r: 100}: 3, + yyinterval{l: 33, r: 33}: 27, + yyinterval{l: 114, r: 114}: 28, + yyinterval{l: 106, r: 107}: 3, + yyinterval{l: 12353, r: 12436}: 7, + yyinterval{l: 62, r: 64}: 18, + yyinterval{l: 14, r: 31}: 18, + yyinterval{l: 45, r: 45}: 32, + yyinterval{l: 61, r: 61}: 33, }, 2: { - yyinterval{l: 98, r: 98}: 2, - yyinterval{l: 52, r: 52}: 2, - yyinterval{l: 117, r: 117}: 2, - yyinterval{l: 102, r: 102}: 2, - yyinterval{l: 105, r: 105}: 2, - yyinterval{l: 106, r: 107}: 2, - yyinterval{l: 101, r: 101}: 2, - yyinterval{l: 55, r: 57}: 2, - yyinterval{l: 109, r: 109}: 2, - yyinterval{l: 116, r: 116}: 2, - yyinterval{l: 99, r: 99}: 2, - yyinterval{l: 111, r: 111}: 2, - yyinterval{l: 114, r: 114}: 2, - yyinterval{l: 49, r: 51}: 2, - yyinterval{l: 53, r: 53}: 2, - yyinterval{l: 103, r: 103}: 2, - yyinterval{l: 108, r: 108}: 2, - yyinterval{l: 97, r: 97}: 2, - yyinterval{l: 110, r: 110}: 2, - yyinterval{l: 65, r: 90}: 2, - yyinterval{l: 54, r: 54}: 2, - yyinterval{l: 120, r: 122}: 2, - yyinterval{l: 115, r: 115}: 2, - yyinterval{l: 100, r: 100}: 2, - yyinterval{l: 104, r: 104}: 2, - yyinterval{l: 112, r: 113}: 2, - yyinterval{l: 48, r: 48}: 2, - yyinterval{l: 118, r: 118}: 2, - yyinterval{l: 119, r: 119}: 2, + yyinterval{l: 54, r: 54}: 2, + yyinterval{l: 55, r: 57}: 2, + yyinterval{l: 48, r: 48}: 2, + yyinterval{l: 49, r: 51}: 2, + yyinterval{l: 52, r: 52}: 2, + yyinterval{l: 53, r: 53}: 2, }, 3: { - yyinterval{l: 109, r: 109}: 2, - yyinterval{l: 48, r: 48}: 2, - yyinterval{l: 102, r: 102}: 2, - yyinterval{l: 97, r: 97}: 2, - yyinterval{l: 117, r: 117}: 2, - yyinterval{l: 105, r: 105}: 2, - yyinterval{l: 119, r: 119}: 2, - yyinterval{l: 110, r: 110}: 2, - yyinterval{l: 106, r: 107}: 2, - yyinterval{l: 116, r: 116}: 27, - yyinterval{l: 112, r: 113}: 2, - yyinterval{l: 55, r: 57}: 2, - yyinterval{l: 49, r: 51}: 2, - yyinterval{l: 52, r: 52}: 2, - yyinterval{l: 104, r: 104}: 2, - yyinterval{l: 98, r: 98}: 2, - yyinterval{l: 120, r: 122}: 2, - yyinterval{l: 108, r: 108}: 2, - yyinterval{l: 99, r: 99}: 2, - yyinterval{l: 115, r: 115}: 2, - yyinterval{l: 111, r: 111}: 2, - yyinterval{l: 101, r: 101}: 2, - yyinterval{l: 100, r: 100}: 2, - yyinterval{l: 53, r: 53}: 2, - yyinterval{l: 114, r: 114}: 2, - yyinterval{l: 103, r: 103}: 2, - yyinterval{l: 118, r: 118}: 2, - yyinterval{l: 54, r: 54}: 2, - yyinterval{l: 65, r: 90}: 2, + yyinterval{l: 53, r: 53}: 3, + yyinterval{l: 106, r: 107}: 3, + yyinterval{l: 101, r: 101}: 3, + yyinterval{l: 102, r: 102}: 3, + yyinterval{l: 108, r: 108}: 3, + yyinterval{l: 49, r: 51}: 3, + yyinterval{l: 54, r: 54}: 3, + yyinterval{l: 55, r: 57}: 3, + yyinterval{l: 105, r: 105}: 3, + yyinterval{l: 48, r: 48}: 3, + yyinterval{l: 99, r: 99}: 3, + yyinterval{l: 109, r: 109}: 3, + yyinterval{l: 104, r: 104}: 3, + yyinterval{l: 112, r: 113}: 3, + yyinterval{l: 111, r: 111}: 3, + yyinterval{l: 100, r: 100}: 3, + yyinterval{l: 103, r: 103}: 3, + yyinterval{l: 116, r: 116}: 3, + yyinterval{l: 114, r: 114}: 3, + yyinterval{l: 110, r: 110}: 3, + yyinterval{l: 120, r: 122}: 3, + yyinterval{l: 115, r: 115}: 3, + yyinterval{l: 52, r: 52}: 3, + yyinterval{l: 65, r: 90}: 3, + yyinterval{l: 117, r: 117}: 3, + yyinterval{l: 118, r: 118}: 3, + yyinterval{l: 98, r: 98}: 3, + yyinterval{l: 119, r: 119}: 3, + yyinterval{l: 97, r: 97}: 3, }, 4: { - yyinterval{l: 114, r: 114}: 2, - yyinterval{l: 110, r: 110}: 2, - yyinterval{l: 105, r: 105}: 2, - yyinterval{l: 97, r: 97}: 2, - yyinterval{l: 109, r: 109}: 2, - yyinterval{l: 102, r: 102}: 2, - yyinterval{l: 49, r: 51}: 2, - yyinterval{l: 52, r: 52}: 2, - yyinterval{l: 111, r: 111}: 2, - yyinterval{l: 98, r: 98}: 2, - yyinterval{l: 48, r: 48}: 2, - yyinterval{l: 119, r: 119}: 2, - yyinterval{l: 55, r: 57}: 2, - yyinterval{l: 104, r: 104}: 2, - yyinterval{l: 53, r: 53}: 2, - yyinterval{l: 101, r: 101}: 2, - yyinterval{l: 106, r: 107}: 2, - yyinterval{l: 108, r: 108}: 2, - yyinterval{l: 100, r: 100}: 2, - yyinterval{l: 103, r: 103}: 2, - yyinterval{l: 65, r: 90}: 2, - yyinterval{l: 99, r: 99}: 2, - yyinterval{l: 116, r: 116}: 2, - yyinterval{l: 112, r: 113}: 2, - yyinterval{l: 117, r: 117}: 2, - yyinterval{l: 118, r: 118}: 2, - yyinterval{l: 54, r: 54}: 2, - yyinterval{l: 115, r: 115}: 2, - yyinterval{l: 120, r: 122}: 2, + yyinterval{l: 104, r: 104}: 3, + yyinterval{l: 112, r: 113}: 3, + yyinterval{l: 105, r: 105}: 3, + yyinterval{l: 118, r: 118}: 3, + yyinterval{l: 49, r: 51}: 3, + yyinterval{l: 101, r: 101}: 3, + yyinterval{l: 115, r: 115}: 3, + yyinterval{l: 110, r: 110}: 3, + yyinterval{l: 119, r: 119}: 3, + yyinterval{l: 114, r: 114}: 3, + yyinterval{l: 106, r: 107}: 3, + yyinterval{l: 52, r: 52}: 3, + yyinterval{l: 97, r: 97}: 3, + yyinterval{l: 55, r: 57}: 3, + yyinterval{l: 54, r: 54}: 3, + yyinterval{l: 109, r: 109}: 3, + yyinterval{l: 100, r: 100}: 3, + yyinterval{l: 53, r: 53}: 3, + yyinterval{l: 103, r: 103}: 3, + yyinterval{l: 111, r: 111}: 3, + yyinterval{l: 108, r: 108}: 3, + yyinterval{l: 65, r: 90}: 3, + yyinterval{l: 116, r: 116}: 36, + yyinterval{l: 102, r: 102}: 3, + yyinterval{l: 117, r: 117}: 3, + yyinterval{l: 120, r: 122}: 3, + yyinterval{l: 98, r: 98}: 3, + yyinterval{l: 99, r: 99}: 3, + yyinterval{l: 48, r: 48}: 3, }, 5: { - yyinterval{l: 103, r: 103}: 2, - yyinterval{l: 116, r: 116}: 2, - yyinterval{l: 48, r: 48}: 2, - yyinterval{l: 52, r: 52}: 2, - yyinterval{l: 118, r: 118}: 2, - yyinterval{l: 115, r: 115}: 2, - yyinterval{l: 111, r: 111}: 2, - yyinterval{l: 109, r: 109}: 2, - yyinterval{l: 99, r: 99}: 2, - yyinterval{l: 110, r: 110}: 2, - yyinterval{l: 106, r: 107}: 2, - yyinterval{l: 100, r: 100}: 2, - yyinterval{l: 54, r: 54}: 2, - yyinterval{l: 101, r: 101}: 2, - yyinterval{l: 97, r: 97}: 2, - yyinterval{l: 55, r: 57}: 2, - yyinterval{l: 114, r: 114}: 2, - yyinterval{l: 102, r: 102}: 2, - yyinterval{l: 112, r: 113}: 2, - yyinterval{l: 120, r: 122}: 2, - yyinterval{l: 65, r: 90}: 2, - yyinterval{l: 108, r: 108}: 2, - yyinterval{l: 49, r: 51}: 2, - yyinterval{l: 98, r: 98}: 2, - yyinterval{l: 53, r: 53}: 2, - yyinterval{l: 104, r: 104}: 2, - yyinterval{l: 119, r: 119}: 2, - yyinterval{l: 117, r: 117}: 2, - yyinterval{l: 105, r: 105}: 34, + yyinterval{l: 112, r: 113}: 3, + yyinterval{l: 120, r: 122}: 3, + yyinterval{l: 104, r: 104}: 3, + yyinterval{l: 103, r: 103}: 3, + yyinterval{l: 108, r: 108}: 3, + yyinterval{l: 54, r: 54}: 3, + yyinterval{l: 106, r: 107}: 3, + yyinterval{l: 119, r: 119}: 3, + yyinterval{l: 116, r: 116}: 3, + yyinterval{l: 115, r: 115}: 3, + yyinterval{l: 53, r: 53}: 3, + yyinterval{l: 109, r: 109}: 3, + yyinterval{l: 101, r: 101}: 3, + yyinterval{l: 99, r: 99}: 3, + yyinterval{l: 52, r: 52}: 3, + yyinterval{l: 49, r: 51}: 3, + yyinterval{l: 48, r: 48}: 3, + yyinterval{l: 98, r: 98}: 3, + yyinterval{l: 111, r: 111}: 3, + yyinterval{l: 105, r: 105}: 3, + yyinterval{l: 118, r: 118}: 3, + yyinterval{l: 114, r: 114}: 3, + yyinterval{l: 102, r: 102}: 3, + yyinterval{l: 55, r: 57}: 3, + yyinterval{l: 100, r: 100}: 3, + yyinterval{l: 117, r: 117}: 3, + yyinterval{l: 65, r: 90}: 3, + yyinterval{l: 97, r: 97}: 3, + yyinterval{l: 110, r: 110}: 3, }, 6: { - yyinterval{l: 106, r: 107}: 2, - yyinterval{l: 103, r: 103}: 2, - yyinterval{l: 117, r: 117}: 28, - yyinterval{l: 55, r: 57}: 2, - yyinterval{l: 65, r: 90}: 2, - yyinterval{l: 114, r: 114}: 2, - yyinterval{l: 101, r: 101}: 2, - yyinterval{l: 108, r: 108}: 2, - yyinterval{l: 111, r: 111}: 2, - yyinterval{l: 112, r: 113}: 2, - yyinterval{l: 118, r: 118}: 2, - yyinterval{l: 97, r: 97}: 2, - yyinterval{l: 53, r: 53}: 2, - yyinterval{l: 119, r: 119}: 2, - yyinterval{l: 100, r: 100}: 2, - yyinterval{l: 105, r: 105}: 2, - yyinterval{l: 110, r: 110}: 2, - yyinterval{l: 98, r: 98}: 2, - yyinterval{l: 120, r: 122}: 2, - yyinterval{l: 109, r: 109}: 2, - yyinterval{l: 52, r: 52}: 2, - yyinterval{l: 104, r: 104}: 2, - yyinterval{l: 48, r: 48}: 2, - yyinterval{l: 54, r: 54}: 2, - yyinterval{l: 115, r: 115}: 2, - yyinterval{l: 49, r: 51}: 2, - yyinterval{l: 102, r: 102}: 2, - yyinterval{l: 116, r: 116}: 2, - yyinterval{l: 99, r: 99}: 2, + yyinterval{l: 108, r: 108}: 3, + yyinterval{l: 115, r: 115}: 3, + yyinterval{l: 119, r: 119}: 3, + yyinterval{l: 109, r: 109}: 3, + yyinterval{l: 54, r: 54}: 3, + yyinterval{l: 112, r: 113}: 3, + yyinterval{l: 101, r: 101}: 3, + yyinterval{l: 65, r: 90}: 3, + yyinterval{l: 106, r: 107}: 3, + yyinterval{l: 103, r: 103}: 3, + yyinterval{l: 98, r: 98}: 3, + yyinterval{l: 99, r: 99}: 3, + yyinterval{l: 105, r: 105}: 3, + yyinterval{l: 52, r: 52}: 3, + yyinterval{l: 110, r: 110}: 3, + yyinterval{l: 118, r: 118}: 3, + yyinterval{l: 111, r: 111}: 3, + yyinterval{l: 100, r: 100}: 3, + yyinterval{l: 104, r: 104}: 3, + yyinterval{l: 120, r: 122}: 3, + yyinterval{l: 116, r: 116}: 3, + yyinterval{l: 55, r: 57}: 3, + yyinterval{l: 97, r: 97}: 3, + yyinterval{l: 102, r: 102}: 3, + yyinterval{l: 53, r: 53}: 3, + yyinterval{l: 49, r: 51}: 3, + yyinterval{l: 48, r: 48}: 3, + yyinterval{l: 117, r: 117}: 10, + yyinterval{l: 114, r: 114}: 3, + }, + 7: { + yyinterval{l: 12353, r: 12436}: 7, }, 8: { - yyinterval{l: 109, r: 109}: 2, - yyinterval{l: 97, r: 97}: 2, - yyinterval{l: 100, r: 100}: 2, - yyinterval{l: 101, r: 101}: 2, - yyinterval{l: 106, r: 107}: 2, - yyinterval{l: 117, r: 117}: 2, - yyinterval{l: 115, r: 115}: 2, - yyinterval{l: 65, r: 90}: 2, - yyinterval{l: 99, r: 99}: 2, - yyinterval{l: 54, r: 54}: 2, - yyinterval{l: 110, r: 110}: 2, - yyinterval{l: 55, r: 57}: 2, - yyinterval{l: 98, r: 98}: 2, - yyinterval{l: 116, r: 116}: 2, - yyinterval{l: 102, r: 102}: 2, - yyinterval{l: 52, r: 52}: 2, - yyinterval{l: 105, r: 105}: 2, - yyinterval{l: 108, r: 108}: 2, - yyinterval{l: 112, r: 113}: 2, - yyinterval{l: 111, r: 111}: 2, - yyinterval{l: 118, r: 118}: 2, - yyinterval{l: 48, r: 48}: 2, - yyinterval{l: 114, r: 114}: 4, - yyinterval{l: 103, r: 103}: 2, - yyinterval{l: 119, r: 119}: 2, - yyinterval{l: 49, r: 51}: 2, - yyinterval{l: 104, r: 104}: 2, - yyinterval{l: 120, r: 122}: 2, - yyinterval{l: 53, r: 53}: 2, + yyinterval{l: 9, r: 9}: 8, + yyinterval{l: 10, r: 10}: 8, + yyinterval{l: 13, r: 13}: 8, + yyinterval{l: 32, r: 32}: 8, }, 9: { - yyinterval{l: 100, r: 100}: 2, - yyinterval{l: 106, r: 107}: 2, - yyinterval{l: 48, r: 48}: 2, - yyinterval{l: 53, r: 53}: 2, - yyinterval{l: 109, r: 109}: 2, - yyinterval{l: 120, r: 122}: 2, - yyinterval{l: 105, r: 105}: 2, - yyinterval{l: 99, r: 99}: 2, - yyinterval{l: 112, r: 113}: 2, - yyinterval{l: 104, r: 104}: 2, - yyinterval{l: 111, r: 111}: 2, - yyinterval{l: 103, r: 103}: 2, - yyinterval{l: 119, r: 119}: 2, - yyinterval{l: 55, r: 57}: 2, - yyinterval{l: 102, r: 102}: 2, - yyinterval{l: 117, r: 117}: 2, - yyinterval{l: 108, r: 108}: 2, - yyinterval{l: 97, r: 97}: 2, - yyinterval{l: 116, r: 116}: 2, - yyinterval{l: 115, r: 115}: 2, - yyinterval{l: 110, r: 110}: 26, - yyinterval{l: 98, r: 98}: 2, - yyinterval{l: 65, r: 90}: 2, - yyinterval{l: 114, r: 114}: 2, - yyinterval{l: 54, r: 54}: 2, - yyinterval{l: 118, r: 118}: 2, - yyinterval{l: 52, r: 52}: 2, - yyinterval{l: 49, r: 51}: 2, - yyinterval{l: 101, r: 101}: 2, + yyinterval{l: 115, r: 115}: 3, + yyinterval{l: 98, r: 98}: 3, + yyinterval{l: 104, r: 104}: 3, + yyinterval{l: 105, r: 105}: 3, + yyinterval{l: 110, r: 110}: 3, + yyinterval{l: 118, r: 118}: 3, + yyinterval{l: 116, r: 116}: 3, + yyinterval{l: 117, r: 117}: 3, + yyinterval{l: 102, r: 102}: 3, + yyinterval{l: 97, r: 97}: 3, + yyinterval{l: 54, r: 54}: 35, + yyinterval{l: 103, r: 103}: 3, + yyinterval{l: 119, r: 119}: 3, + yyinterval{l: 108, r: 108}: 3, + yyinterval{l: 111, r: 111}: 3, + yyinterval{l: 99, r: 99}: 3, + yyinterval{l: 49, r: 51}: 3, + yyinterval{l: 114, r: 114}: 3, + yyinterval{l: 100, r: 100}: 3, + yyinterval{l: 65, r: 90}: 3, + yyinterval{l: 48, r: 48}: 3, + yyinterval{l: 112, r: 113}: 3, + yyinterval{l: 101, r: 101}: 3, + yyinterval{l: 106, r: 107}: 3, + yyinterval{l: 109, r: 109}: 3, + yyinterval{l: 52, r: 52}: 3, + yyinterval{l: 55, r: 57}: 3, + yyinterval{l: 53, r: 53}: 3, + yyinterval{l: 120, r: 122}: 3, }, 10: { - yyinterval{l: 115, r: 115}: 2, - yyinterval{l: 116, r: 116}: 2, - yyinterval{l: 52, r: 52}: 2, - yyinterval{l: 108, r: 108}: 2, - yyinterval{l: 114, r: 114}: 2, - yyinterval{l: 111, r: 111}: 29, - yyinterval{l: 101, r: 101}: 2, - yyinterval{l: 55, r: 57}: 2, - yyinterval{l: 100, r: 100}: 2, - yyinterval{l: 119, r: 119}: 2, - yyinterval{l: 110, r: 110}: 2, - yyinterval{l: 106, r: 107}: 2, - yyinterval{l: 99, r: 99}: 2, - yyinterval{l: 109, r: 109}: 2, - yyinterval{l: 104, r: 104}: 2, - yyinterval{l: 97, r: 97}: 2, - yyinterval{l: 112, r: 113}: 2, - yyinterval{l: 120, r: 122}: 2, - yyinterval{l: 118, r: 118}: 2, - yyinterval{l: 48, r: 48}: 2, - yyinterval{l: 54, r: 54}: 2, - yyinterval{l: 49, r: 51}: 2, - yyinterval{l: 105, r: 105}: 2, - yyinterval{l: 102, r: 102}: 2, - yyinterval{l: 65, r: 90}: 2, - yyinterval{l: 98, r: 98}: 2, - yyinterval{l: 103, r: 103}: 2, - yyinterval{l: 53, r: 53}: 2, - yyinterval{l: 117, r: 117}: 2, - }, - 11: { - yyinterval{l: 61, r: 61}: 7, + yyinterval{l: 98, r: 98}: 3, + yyinterval{l: 55, r: 57}: 3, + yyinterval{l: 102, r: 102}: 3, + yyinterval{l: 101, r: 101}: 3, + yyinterval{l: 110, r: 110}: 3, + yyinterval{l: 106, r: 107}: 3, + yyinterval{l: 119, r: 119}: 3, + yyinterval{l: 99, r: 99}: 3, + yyinterval{l: 104, r: 104}: 3, + yyinterval{l: 114, r: 114}: 39, + yyinterval{l: 97, r: 97}: 3, + yyinterval{l: 49, r: 51}: 3, + yyinterval{l: 48, r: 48}: 3, + yyinterval{l: 109, r: 109}: 3, + yyinterval{l: 116, r: 116}: 3, + yyinterval{l: 53, r: 53}: 3, + yyinterval{l: 120, r: 122}: 3, + yyinterval{l: 65, r: 90}: 3, + yyinterval{l: 54, r: 54}: 3, + yyinterval{l: 117, r: 117}: 3, + yyinterval{l: 103, r: 103}: 3, + yyinterval{l: 118, r: 118}: 3, + yyinterval{l: 112, r: 113}: 3, + yyinterval{l: 52, r: 52}: 3, + yyinterval{l: 115, r: 115}: 3, + yyinterval{l: 111, r: 111}: 3, + yyinterval{l: 105, r: 105}: 3, + yyinterval{l: 108, r: 108}: 3, + yyinterval{l: 100, r: 100}: 3, }, 13: { - yyinterval{l: 52, r: 52}: 13, - yyinterval{l: 53, r: 53}: 13, - yyinterval{l: 54, r: 54}: 13, - yyinterval{l: 55, r: 57}: 13, - yyinterval{l: 48, r: 48}: 13, - yyinterval{l: 49, r: 51}: 13, + yyinterval{l: 116, r: 116}: 3, + yyinterval{l: 112, r: 113}: 3, + yyinterval{l: 52, r: 52}: 3, + yyinterval{l: 115, r: 115}: 3, + yyinterval{l: 55, r: 57}: 3, + yyinterval{l: 111, r: 111}: 3, + yyinterval{l: 48, r: 48}: 3, + yyinterval{l: 102, r: 102}: 3, + yyinterval{l: 98, r: 98}: 3, + yyinterval{l: 105, r: 105}: 3, + yyinterval{l: 104, r: 104}: 3, + yyinterval{l: 109, r: 109}: 3, + yyinterval{l: 106, r: 107}: 3, + yyinterval{l: 110, r: 110}: 3, + yyinterval{l: 120, r: 122}: 3, + yyinterval{l: 114, r: 114}: 3, + yyinterval{l: 101, r: 101}: 3, + yyinterval{l: 99, r: 99}: 3, + yyinterval{l: 108, r: 108}: 42, + yyinterval{l: 49, r: 51}: 3, + yyinterval{l: 65, r: 90}: 3, + yyinterval{l: 117, r: 117}: 3, + yyinterval{l: 53, r: 53}: 3, + yyinterval{l: 100, r: 100}: 3, + yyinterval{l: 118, r: 118}: 3, + yyinterval{l: 119, r: 119}: 3, + yyinterval{l: 97, r: 97}: 3, + yyinterval{l: 103, r: 103}: 3, + yyinterval{l: 54, r: 54}: 3, }, 14: { - yyinterval{l: 9, r: 9}: 14, - yyinterval{l: 10, r: 10}: 14, - yyinterval{l: 13, r: 13}: 14, - yyinterval{l: 32, r: 32}: 14, + yyinterval{l: 119, r: 119}: 3, + yyinterval{l: 48, r: 48}: 3, + yyinterval{l: 100, r: 100}: 3, + yyinterval{l: 53, r: 53}: 3, + yyinterval{l: 55, r: 57}: 3, + yyinterval{l: 110, r: 110}: 3, + yyinterval{l: 108, r: 108}: 3, + yyinterval{l: 98, r: 98}: 3, + yyinterval{l: 101, r: 101}: 3, + yyinterval{l: 114, r: 114}: 3, + yyinterval{l: 52, r: 52}: 3, + yyinterval{l: 118, r: 118}: 3, + yyinterval{l: 109, r: 109}: 3, + yyinterval{l: 54, r: 54}: 3, + yyinterval{l: 102, r: 102}: 3, + yyinterval{l: 112, r: 113}: 3, + yyinterval{l: 105, r: 105}: 3, + yyinterval{l: 117, r: 117}: 3, + yyinterval{l: 104, r: 104}: 3, + yyinterval{l: 99, r: 99}: 3, + yyinterval{l: 115, r: 115}: 3, + yyinterval{l: 103, r: 103}: 3, + yyinterval{l: 116, r: 116}: 9, + yyinterval{l: 65, r: 90}: 3, + yyinterval{l: 106, r: 107}: 3, + yyinterval{l: 49, r: 51}: 3, + yyinterval{l: 111, r: 111}: 3, + yyinterval{l: 120, r: 122}: 3, + yyinterval{l: 97, r: 97}: 3, }, 15: { - yyinterval{l: 108, r: 108}: 2, - yyinterval{l: 119, r: 119}: 2, - yyinterval{l: 52, r: 52}: 2, - yyinterval{l: 111, r: 111}: 2, - yyinterval{l: 116, r: 116}: 2, - yyinterval{l: 103, r: 103}: 2, - yyinterval{l: 114, r: 114}: 2, - yyinterval{l: 49, r: 51}: 2, - yyinterval{l: 48, r: 48}: 2, - yyinterval{l: 65, r: 90}: 2, - yyinterval{l: 120, r: 122}: 2, - yyinterval{l: 101, r: 101}: 32, - yyinterval{l: 112, r: 113}: 2, - yyinterval{l: 97, r: 97}: 2, - yyinterval{l: 54, r: 54}: 2, - yyinterval{l: 53, r: 53}: 2, - yyinterval{l: 109, r: 109}: 2, - yyinterval{l: 100, r: 100}: 2, - yyinterval{l: 117, r: 117}: 2, - yyinterval{l: 102, r: 102}: 2, - yyinterval{l: 106, r: 107}: 2, - yyinterval{l: 105, r: 105}: 2, - yyinterval{l: 55, r: 57}: 2, - yyinterval{l: 118, r: 118}: 2, - yyinterval{l: 98, r: 98}: 2, - yyinterval{l: 99, r: 99}: 2, - yyinterval{l: 115, r: 115}: 2, - yyinterval{l: 110, r: 110}: 2, - yyinterval{l: 104, r: 104}: 2, + yyinterval{l: 119, r: 119}: 3, + yyinterval{l: 52, r: 52}: 3, + yyinterval{l: 101, r: 101}: 3, + yyinterval{l: 103, r: 103}: 3, + yyinterval{l: 117, r: 117}: 3, + yyinterval{l: 53, r: 53}: 3, + yyinterval{l: 116, r: 116}: 3, + yyinterval{l: 115, r: 115}: 3, + yyinterval{l: 98, r: 98}: 3, + yyinterval{l: 112, r: 113}: 3, + yyinterval{l: 49, r: 51}: 3, + yyinterval{l: 100, r: 100}: 3, + yyinterval{l: 99, r: 99}: 3, + yyinterval{l: 104, r: 104}: 3, + yyinterval{l: 48, r: 48}: 3, + yyinterval{l: 55, r: 57}: 3, + yyinterval{l: 97, r: 97}: 3, + yyinterval{l: 65, r: 90}: 3, + yyinterval{l: 120, r: 122}: 3, + yyinterval{l: 105, r: 105}: 3, + yyinterval{l: 102, r: 102}: 3, + yyinterval{l: 108, r: 108}: 3, + yyinterval{l: 114, r: 114}: 5, + yyinterval{l: 111, r: 111}: 3, + yyinterval{l: 54, r: 54}: 3, + yyinterval{l: 110, r: 110}: 3, + yyinterval{l: 109, r: 109}: 3, + yyinterval{l: 118, r: 118}: 3, + yyinterval{l: 106, r: 107}: 3, }, 16: { - yyinterval{l: 116, r: 116}: 2, - yyinterval{l: 102, r: 102}: 2, - yyinterval{l: 53, r: 53}: 2, - yyinterval{l: 120, r: 122}: 2, - yyinterval{l: 98, r: 98}: 2, - yyinterval{l: 112, r: 113}: 2, - yyinterval{l: 119, r: 119}: 2, - yyinterval{l: 105, r: 105}: 2, - yyinterval{l: 49, r: 51}: 2, - yyinterval{l: 65, r: 90}: 2, - yyinterval{l: 54, r: 54}: 2, - yyinterval{l: 111, r: 111}: 2, - yyinterval{l: 52, r: 52}: 2, - yyinterval{l: 108, r: 108}: 2, - yyinterval{l: 118, r: 118}: 2, - yyinterval{l: 48, r: 48}: 2, - yyinterval{l: 97, r: 97}: 2, - yyinterval{l: 55, r: 57}: 2, - yyinterval{l: 106, r: 107}: 2, - yyinterval{l: 109, r: 109}: 2, - yyinterval{l: 115, r: 115}: 2, - yyinterval{l: 114, r: 114}: 2, - yyinterval{l: 100, r: 100}: 2, - yyinterval{l: 117, r: 117}: 2, - yyinterval{l: 99, r: 99}: 2, - yyinterval{l: 101, r: 101}: 2, - yyinterval{l: 110, r: 110}: 2, - yyinterval{l: 103, r: 103}: 2, - yyinterval{l: 104, r: 104}: 5, + yyinterval{l: 102, r: 102}: 3, + yyinterval{l: 97, r: 97}: 3, + yyinterval{l: 55, r: 57}: 3, + yyinterval{l: 110, r: 110}: 38, + yyinterval{l: 104, r: 104}: 3, + yyinterval{l: 100, r: 100}: 3, + yyinterval{l: 111, r: 111}: 3, + yyinterval{l: 99, r: 99}: 3, + yyinterval{l: 53, r: 53}: 3, + yyinterval{l: 112, r: 113}: 3, + yyinterval{l: 116, r: 116}: 3, + yyinterval{l: 115, r: 115}: 3, + yyinterval{l: 119, r: 119}: 3, + yyinterval{l: 106, r: 107}: 3, + yyinterval{l: 52, r: 52}: 3, + yyinterval{l: 65, r: 90}: 3, + yyinterval{l: 114, r: 114}: 3, + yyinterval{l: 54, r: 54}: 3, + yyinterval{l: 118, r: 118}: 3, + yyinterval{l: 108, r: 108}: 3, + yyinterval{l: 48, r: 48}: 3, + yyinterval{l: 117, r: 117}: 3, + yyinterval{l: 98, r: 98}: 3, + yyinterval{l: 120, r: 122}: 3, + yyinterval{l: 109, r: 109}: 3, + yyinterval{l: 103, r: 103}: 3, + yyinterval{l: 49, r: 51}: 3, + yyinterval{l: 105, r: 105}: 3, + yyinterval{l: 101, r: 101}: 3, }, - 18: { - yyinterval{l: 119, r: 119}: 2, - yyinterval{l: 53, r: 53}: 2, - yyinterval{l: 103, r: 103}: 2, - yyinterval{l: 52, r: 52}: 2, - yyinterval{l: 102, r: 102}: 4, - yyinterval{l: 112, r: 113}: 2, - yyinterval{l: 100, r: 100}: 2, - yyinterval{l: 99, r: 99}: 2, - yyinterval{l: 48, r: 48}: 2, - yyinterval{l: 120, r: 122}: 2, - yyinterval{l: 49, r: 51}: 2, - yyinterval{l: 65, r: 90}: 2, - yyinterval{l: 105, r: 105}: 2, - yyinterval{l: 55, r: 57}: 2, - yyinterval{l: 108, r: 108}: 2, - yyinterval{l: 97, r: 97}: 2, - yyinterval{l: 115, r: 115}: 2, - yyinterval{l: 104, r: 104}: 2, - yyinterval{l: 118, r: 118}: 2, - yyinterval{l: 117, r: 117}: 2, - yyinterval{l: 109, r: 109}: 2, + 17: { + yyinterval{l: 120, r: 122}: 3, + yyinterval{l: 105, r: 105}: 3, + yyinterval{l: 114, r: 114}: 3, + yyinterval{l: 112, r: 113}: 3, + yyinterval{l: 53, r: 53}: 3, + yyinterval{l: 65, r: 90}: 3, + yyinterval{l: 52, r: 52}: 3, + yyinterval{l: 103, r: 103}: 3, + yyinterval{l: 108, r: 108}: 3, + yyinterval{l: 97, r: 97}: 3, yyinterval{l: 110, r: 110}: 3, - yyinterval{l: 114, r: 114}: 2, - yyinterval{l: 116, r: 116}: 2, - yyinterval{l: 98, r: 98}: 2, - yyinterval{l: 106, r: 107}: 2, - yyinterval{l: 101, r: 101}: 2, - yyinterval{l: 111, r: 111}: 2, - yyinterval{l: 54, r: 54}: 2, - }, - 20: { - yyinterval{l: 12353, r: 12436}: 20, - }, - 23: { - yyinterval{l: 99, r: 99}: 2, - yyinterval{l: 65, r: 90}: 2, - yyinterval{l: 97, r: 97}: 2, - yyinterval{l: 105, r: 105}: 2, - yyinterval{l: 104, r: 104}: 2, - yyinterval{l: 48, r: 48}: 2, - yyinterval{l: 102, r: 102}: 2, - yyinterval{l: 52, r: 52}: 2, - yyinterval{l: 112, r: 113}: 2, - yyinterval{l: 118, r: 118}: 2, - yyinterval{l: 101, r: 101}: 2, - yyinterval{l: 117, r: 117}: 9, - yyinterval{l: 106, r: 107}: 2, - yyinterval{l: 110, r: 110}: 2, - yyinterval{l: 98, r: 98}: 2, - yyinterval{l: 111, r: 111}: 8, - yyinterval{l: 49, r: 51}: 2, - yyinterval{l: 55, r: 57}: 2, - yyinterval{l: 108, r: 108}: 10, - yyinterval{l: 100, r: 100}: 2, - yyinterval{l: 120, r: 122}: 2, - yyinterval{l: 116, r: 116}: 2, - yyinterval{l: 54, r: 54}: 2, - yyinterval{l: 103, r: 103}: 2, - yyinterval{l: 109, r: 109}: 2, - yyinterval{l: 114, r: 114}: 2, - yyinterval{l: 119, r: 119}: 2, - yyinterval{l: 53, r: 53}: 2, - yyinterval{l: 115, r: 115}: 2, + yyinterval{l: 48, r: 48}: 3, + yyinterval{l: 118, r: 118}: 3, + yyinterval{l: 115, r: 115}: 3, + yyinterval{l: 99, r: 99}: 3, + yyinterval{l: 116, r: 116}: 3, + yyinterval{l: 109, r: 109}: 3, + yyinterval{l: 106, r: 107}: 3, + yyinterval{l: 49, r: 51}: 3, + yyinterval{l: 54, r: 54}: 3, + yyinterval{l: 111, r: 111}: 34, + yyinterval{l: 98, r: 98}: 3, + yyinterval{l: 101, r: 101}: 3, + yyinterval{l: 100, r: 100}: 3, + yyinterval{l: 104, r: 104}: 3, + yyinterval{l: 119, r: 119}: 3, + yyinterval{l: 117, r: 117}: 3, + yyinterval{l: 55, r: 57}: 3, + yyinterval{l: 102, r: 102}: 3, }, - 24: { - yyinterval{l: 117, r: 117}: 2, - yyinterval{l: 110, r: 110}: 4, - yyinterval{l: 99, r: 99}: 2, - yyinterval{l: 112, r: 113}: 2, - yyinterval{l: 52, r: 52}: 2, - yyinterval{l: 106, r: 107}: 2, - yyinterval{l: 98, r: 98}: 2, - yyinterval{l: 119, r: 119}: 2, - yyinterval{l: 104, r: 104}: 2, - yyinterval{l: 53, r: 53}: 2, - yyinterval{l: 101, r: 101}: 2, - yyinterval{l: 97, r: 97}: 2, - yyinterval{l: 48, r: 48}: 2, - yyinterval{l: 49, r: 51}: 2, - yyinterval{l: 115, r: 115}: 2, - yyinterval{l: 105, r: 105}: 2, - yyinterval{l: 108, r: 108}: 2, - yyinterval{l: 102, r: 102}: 2, - yyinterval{l: 114, r: 114}: 2, - yyinterval{l: 116, r: 116}: 2, - yyinterval{l: 100, r: 100}: 2, - yyinterval{l: 54, r: 54}: 2, - yyinterval{l: 55, r: 57}: 2, - yyinterval{l: 65, r: 90}: 2, - yyinterval{l: 120, r: 122}: 2, - yyinterval{l: 111, r: 111}: 2, - yyinterval{l: 103, r: 103}: 2, - yyinterval{l: 118, r: 118}: 2, - yyinterval{l: 109, r: 109}: 2, + 19: { + yyinterval{l: 61, r: 61}: 12, }, - 25: { - yyinterval{l: 112, r: 113}: 2, - yyinterval{l: 118, r: 118}: 2, - yyinterval{l: 101, r: 101}: 4, - yyinterval{l: 116, r: 116}: 2, - yyinterval{l: 106, r: 107}: 2, - yyinterval{l: 114, r: 114}: 2, - yyinterval{l: 120, r: 122}: 2, - yyinterval{l: 48, r: 48}: 2, - yyinterval{l: 65, r: 90}: 2, - yyinterval{l: 117, r: 117}: 2, - yyinterval{l: 115, r: 115}: 2, - yyinterval{l: 111, r: 111}: 2, - yyinterval{l: 53, r: 53}: 2, - yyinterval{l: 110, r: 110}: 2, - yyinterval{l: 99, r: 99}: 2, - yyinterval{l: 108, r: 108}: 2, - yyinterval{l: 52, r: 52}: 2, - yyinterval{l: 104, r: 104}: 2, - yyinterval{l: 119, r: 119}: 2, - yyinterval{l: 98, r: 98}: 2, - yyinterval{l: 97, r: 97}: 2, - yyinterval{l: 49, r: 51}: 2, - yyinterval{l: 100, r: 100}: 2, - yyinterval{l: 105, r: 105}: 2, - yyinterval{l: 102, r: 102}: 2, - yyinterval{l: 55, r: 57}: 2, - yyinterval{l: 54, r: 54}: 2, - yyinterval{l: 109, r: 109}: 2, - yyinterval{l: 103, r: 103}: 2, + 20: { + yyinterval{l: 53, r: 53}: 3, + yyinterval{l: 49, r: 51}: 3, + yyinterval{l: 55, r: 57}: 3, + yyinterval{l: 100, r: 100}: 3, + yyinterval{l: 65, r: 90}: 3, + yyinterval{l: 118, r: 118}: 3, + yyinterval{l: 52, r: 52}: 3, + yyinterval{l: 120, r: 122}: 3, + yyinterval{l: 117, r: 117}: 16, + yyinterval{l: 109, r: 109}: 3, + yyinterval{l: 111, r: 111}: 15, + yyinterval{l: 54, r: 54}: 3, + yyinterval{l: 114, r: 114}: 3, + yyinterval{l: 110, r: 110}: 3, + yyinterval{l: 98, r: 98}: 3, + yyinterval{l: 99, r: 99}: 3, + yyinterval{l: 102, r: 102}: 3, + yyinterval{l: 103, r: 103}: 3, + yyinterval{l: 48, r: 48}: 3, + yyinterval{l: 105, r: 105}: 3, + yyinterval{l: 116, r: 116}: 3, + yyinterval{l: 112, r: 113}: 3, + yyinterval{l: 106, r: 107}: 3, + yyinterval{l: 104, r: 104}: 3, + yyinterval{l: 115, r: 115}: 3, + yyinterval{l: 108, r: 108}: 17, + yyinterval{l: 97, r: 97}: 3, + yyinterval{l: 101, r: 101}: 3, + yyinterval{l: 119, r: 119}: 3, }, 26: { - yyinterval{l: 52, r: 52}: 2, - yyinterval{l: 65, r: 90}: 2, - yyinterval{l: 117, r: 117}: 2, - yyinterval{l: 98, r: 98}: 2, - yyinterval{l: 100, r: 100}: 2, - yyinterval{l: 48, r: 48}: 2, - yyinterval{l: 105, r: 105}: 2, - yyinterval{l: 102, r: 102}: 2, - yyinterval{l: 120, r: 122}: 2, - yyinterval{l: 112, r: 113}: 2, - yyinterval{l: 103, r: 103}: 2, - yyinterval{l: 118, r: 118}: 2, - yyinterval{l: 54, r: 54}: 2, - yyinterval{l: 99, r: 99}: 4, - yyinterval{l: 116, r: 116}: 2, - yyinterval{l: 101, r: 101}: 2, - yyinterval{l: 115, r: 115}: 2, - yyinterval{l: 119, r: 119}: 2, - yyinterval{l: 53, r: 53}: 2, - yyinterval{l: 114, r: 114}: 2, - yyinterval{l: 110, r: 110}: 2, - yyinterval{l: 49, r: 51}: 2, - yyinterval{l: 55, r: 57}: 2, - yyinterval{l: 104, r: 104}: 2, - yyinterval{l: 108, r: 108}: 2, - yyinterval{l: 111, r: 111}: 2, - yyinterval{l: 97, r: 97}: 2, - yyinterval{l: 106, r: 107}: 2, - yyinterval{l: 109, r: 109}: 2, + yyinterval{l: 118, r: 118}: 3, + yyinterval{l: 103, r: 103}: 3, + yyinterval{l: 116, r: 116}: 3, + yyinterval{l: 106, r: 107}: 3, + yyinterval{l: 52, r: 52}: 3, + yyinterval{l: 112, r: 113}: 3, + yyinterval{l: 117, r: 117}: 3, + yyinterval{l: 65, r: 90}: 3, + yyinterval{l: 115, r: 115}: 3, + yyinterval{l: 97, r: 97}: 3, + yyinterval{l: 101, r: 101}: 3, + yyinterval{l: 108, r: 108}: 3, + yyinterval{l: 109, r: 109}: 3, + yyinterval{l: 114, r: 114}: 3, + yyinterval{l: 120, r: 122}: 3, + yyinterval{l: 111, r: 111}: 3, + yyinterval{l: 110, r: 110}: 4, + yyinterval{l: 104, r: 104}: 3, + yyinterval{l: 105, r: 105}: 3, + yyinterval{l: 49, r: 51}: 3, + yyinterval{l: 102, r: 102}: 5, + yyinterval{l: 54, r: 54}: 3, + yyinterval{l: 53, r: 53}: 3, + yyinterval{l: 100, r: 100}: 3, + yyinterval{l: 98, r: 98}: 3, + yyinterval{l: 99, r: 99}: 3, + yyinterval{l: 48, r: 48}: 3, + yyinterval{l: 119, r: 119}: 3, + yyinterval{l: 55, r: 57}: 3, }, 27: { - yyinterval{l: 54, r: 54}: 2, - yyinterval{l: 103, r: 103}: 2, - yyinterval{l: 102, r: 102}: 2, - yyinterval{l: 65, r: 90}: 2, - yyinterval{l: 116, r: 116}: 2, - yyinterval{l: 108, r: 108}: 2, - yyinterval{l: 109, r: 109}: 2, - yyinterval{l: 53, r: 53}: 2, - yyinterval{l: 99, r: 99}: 2, - yyinterval{l: 114, r: 114}: 2, - yyinterval{l: 100, r: 100}: 2, - yyinterval{l: 98, r: 98}: 2, - yyinterval{l: 48, r: 48}: 2, - yyinterval{l: 117, r: 117}: 2, - yyinterval{l: 105, r: 105}: 2, - yyinterval{l: 118, r: 118}: 2, - yyinterval{l: 97, r: 97}: 2, - yyinterval{l: 55, r: 57}: 2, - yyinterval{l: 119, r: 119}: 2, - yyinterval{l: 101, r: 101}: 2, - yyinterval{l: 111, r: 111}: 2, - yyinterval{l: 106, r: 107}: 2, - yyinterval{l: 112, r: 113}: 2, - yyinterval{l: 120, r: 122}: 2, - yyinterval{l: 110, r: 110}: 2, - yyinterval{l: 104, r: 104}: 2, - yyinterval{l: 52, r: 52}: 2, - yyinterval{l: 49, r: 51}: 2, - yyinterval{l: 115, r: 115}: 2, + yyinterval{l: 61, r: 61}: 11, }, 28: { - yyinterval{l: 116, r: 116}: 2, - yyinterval{l: 52, r: 52}: 2, - yyinterval{l: 49, r: 51}: 2, - yyinterval{l: 48, r: 48}: 2, - yyinterval{l: 112, r: 113}: 2, - yyinterval{l: 54, r: 54}: 2, - yyinterval{l: 104, r: 104}: 2, - yyinterval{l: 117, r: 117}: 2, - yyinterval{l: 100, r: 100}: 2, - yyinterval{l: 105, r: 105}: 2, - yyinterval{l: 110, r: 110}: 2, - yyinterval{l: 109, r: 109}: 2, - yyinterval{l: 108, r: 108}: 2, - yyinterval{l: 99, r: 99}: 2, - yyinterval{l: 101, r: 101}: 2, - yyinterval{l: 111, r: 111}: 2, - yyinterval{l: 103, r: 103}: 2, - yyinterval{l: 65, r: 90}: 2, - yyinterval{l: 98, r: 98}: 2, - yyinterval{l: 106, r: 107}: 2, - yyinterval{l: 120, r: 122}: 2, - yyinterval{l: 118, r: 118}: 2, - yyinterval{l: 115, r: 115}: 2, - yyinterval{l: 97, r: 97}: 2, - yyinterval{l: 55, r: 57}: 2, - yyinterval{l: 119, r: 119}: 2, - yyinterval{l: 53, r: 53}: 2, - yyinterval{l: 102, r: 102}: 2, - yyinterval{l: 114, r: 114}: 24, - }, - 29: { - yyinterval{l: 54, r: 54}: 2, - yyinterval{l: 111, r: 111}: 2, - yyinterval{l: 108, r: 108}: 2, - yyinterval{l: 105, r: 105}: 2, - yyinterval{l: 106, r: 107}: 2, - yyinterval{l: 104, r: 104}: 2, - yyinterval{l: 103, r: 103}: 2, - yyinterval{l: 115, r: 115}: 2, - yyinterval{l: 100, r: 100}: 2, - yyinterval{l: 114, r: 114}: 2, - yyinterval{l: 98, r: 98}: 2, - yyinterval{l: 110, r: 110}: 2, - yyinterval{l: 53, r: 53}: 2, - yyinterval{l: 55, r: 57}: 2, - yyinterval{l: 109, r: 109}: 2, - yyinterval{l: 112, r: 113}: 2, - yyinterval{l: 116, r: 116}: 2, - yyinterval{l: 118, r: 118}: 2, - yyinterval{l: 102, r: 102}: 2, - yyinterval{l: 97, r: 97}: 30, - yyinterval{l: 119, r: 119}: 2, - yyinterval{l: 99, r: 99}: 2, - yyinterval{l: 52, r: 52}: 2, - yyinterval{l: 101, r: 101}: 2, - yyinterval{l: 65, r: 90}: 2, - yyinterval{l: 48, r: 48}: 2, - yyinterval{l: 117, r: 117}: 2, - yyinterval{l: 120, r: 122}: 2, - yyinterval{l: 49, r: 51}: 2, + yyinterval{l: 106, r: 107}: 3, + yyinterval{l: 117, r: 117}: 3, + yyinterval{l: 118, r: 118}: 3, + yyinterval{l: 52, r: 52}: 3, + yyinterval{l: 55, r: 57}: 3, + yyinterval{l: 97, r: 97}: 3, + yyinterval{l: 109, r: 109}: 3, + yyinterval{l: 108, r: 108}: 3, + yyinterval{l: 105, r: 105}: 3, + yyinterval{l: 103, r: 103}: 3, + yyinterval{l: 48, r: 48}: 3, + yyinterval{l: 110, r: 110}: 3, + yyinterval{l: 65, r: 90}: 3, + yyinterval{l: 49, r: 51}: 3, + yyinterval{l: 104, r: 104}: 3, + yyinterval{l: 112, r: 113}: 3, + yyinterval{l: 99, r: 99}: 3, + yyinterval{l: 54, r: 54}: 3, + yyinterval{l: 100, r: 100}: 3, + yyinterval{l: 114, r: 114}: 3, + yyinterval{l: 119, r: 119}: 3, + yyinterval{l: 116, r: 116}: 3, + yyinterval{l: 120, r: 122}: 3, + yyinterval{l: 53, r: 53}: 3, + yyinterval{l: 115, r: 115}: 3, + yyinterval{l: 98, r: 98}: 3, + yyinterval{l: 111, r: 111}: 3, + yyinterval{l: 101, r: 101}: 40, + yyinterval{l: 102, r: 102}: 3, }, 30: { - yyinterval{l: 118, r: 118}: 2, - yyinterval{l: 111, r: 111}: 2, - yyinterval{l: 114, r: 114}: 2, - yyinterval{l: 100, r: 100}: 2, - yyinterval{l: 55, r: 57}: 2, - yyinterval{l: 105, r: 105}: 2, - yyinterval{l: 54, r: 54}: 2, - yyinterval{l: 48, r: 48}: 2, - yyinterval{l: 49, r: 51}: 2, - yyinterval{l: 104, r: 104}: 2, - yyinterval{l: 112, r: 113}: 2, - yyinterval{l: 102, r: 102}: 2, - yyinterval{l: 110, r: 110}: 2, - yyinterval{l: 120, r: 122}: 2, - yyinterval{l: 108, r: 108}: 2, - yyinterval{l: 99, r: 99}: 2, - yyinterval{l: 106, r: 107}: 2, - yyinterval{l: 115, r: 115}: 2, - yyinterval{l: 53, r: 53}: 2, - yyinterval{l: 97, r: 97}: 2, - yyinterval{l: 52, r: 52}: 2, - yyinterval{l: 103, r: 103}: 2, - yyinterval{l: 109, r: 109}: 2, - yyinterval{l: 116, r: 116}: 31, - yyinterval{l: 119, r: 119}: 2, - yyinterval{l: 101, r: 101}: 2, - yyinterval{l: 65, r: 90}: 2, - yyinterval{l: 117, r: 117}: 2, - yyinterval{l: 98, r: 98}: 2, + yyinterval{l: 111, r: 111}: 3, + yyinterval{l: 54, r: 54}: 3, + yyinterval{l: 104, r: 104}: 41, + yyinterval{l: 102, r: 102}: 3, + yyinterval{l: 117, r: 117}: 3, + yyinterval{l: 52, r: 52}: 3, + yyinterval{l: 97, r: 97}: 3, + yyinterval{l: 114, r: 114}: 3, + yyinterval{l: 116, r: 116}: 3, + yyinterval{l: 65, r: 90}: 3, + yyinterval{l: 49, r: 51}: 3, + yyinterval{l: 120, r: 122}: 3, + yyinterval{l: 110, r: 110}: 3, + yyinterval{l: 109, r: 109}: 3, + yyinterval{l: 48, r: 48}: 3, + yyinterval{l: 101, r: 101}: 3, + yyinterval{l: 103, r: 103}: 3, + yyinterval{l: 99, r: 99}: 3, + yyinterval{l: 118, r: 118}: 3, + yyinterval{l: 55, r: 57}: 3, + yyinterval{l: 105, r: 105}: 3, + yyinterval{l: 108, r: 108}: 3, + yyinterval{l: 98, r: 98}: 3, + yyinterval{l: 53, r: 53}: 3, + yyinterval{l: 106, r: 107}: 3, + yyinterval{l: 112, r: 113}: 3, + yyinterval{l: 115, r: 115}: 3, + yyinterval{l: 119, r: 119}: 3, + yyinterval{l: 100, r: 100}: 3, + }, + 33: { + yyinterval{l: 61, r: 61}: 37, + }, + 34: { + yyinterval{l: 114, r: 114}: 3, + yyinterval{l: 49, r: 51}: 3, + yyinterval{l: 105, r: 105}: 3, + yyinterval{l: 117, r: 117}: 3, + yyinterval{l: 106, r: 107}: 3, + yyinterval{l: 101, r: 101}: 3, + yyinterval{l: 109, r: 109}: 3, + yyinterval{l: 115, r: 115}: 3, + yyinterval{l: 52, r: 52}: 3, + yyinterval{l: 100, r: 100}: 3, + yyinterval{l: 104, r: 104}: 3, + yyinterval{l: 112, r: 113}: 3, + yyinterval{l: 53, r: 53}: 3, + yyinterval{l: 103, r: 103}: 3, + yyinterval{l: 108, r: 108}: 3, + yyinterval{l: 65, r: 90}: 3, + yyinterval{l: 55, r: 57}: 3, + yyinterval{l: 119, r: 119}: 3, + yyinterval{l: 97, r: 97}: 14, + yyinterval{l: 118, r: 118}: 3, + yyinterval{l: 99, r: 99}: 3, + yyinterval{l: 116, r: 116}: 3, + yyinterval{l: 111, r: 111}: 3, + yyinterval{l: 110, r: 110}: 3, + yyinterval{l: 102, r: 102}: 3, + yyinterval{l: 98, r: 98}: 3, + yyinterval{l: 48, r: 48}: 3, + yyinterval{l: 120, r: 122}: 3, + yyinterval{l: 54, r: 54}: 3, }, - 31: { - yyinterval{l: 105, r: 105}: 2, - yyinterval{l: 100, r: 100}: 2, - yyinterval{l: 112, r: 113}: 2, - yyinterval{l: 53, r: 53}: 2, - yyinterval{l: 111, r: 111}: 2, - yyinterval{l: 103, r: 103}: 2, - yyinterval{l: 98, r: 98}: 2, - yyinterval{l: 108, r: 108}: 2, - yyinterval{l: 119, r: 119}: 2, - yyinterval{l: 55, r: 57}: 2, - yyinterval{l: 54, r: 54}: 33, - yyinterval{l: 52, r: 52}: 2, - yyinterval{l: 118, r: 118}: 2, - yyinterval{l: 97, r: 97}: 2, - yyinterval{l: 115, r: 115}: 2, - yyinterval{l: 49, r: 51}: 2, - yyinterval{l: 116, r: 116}: 2, - yyinterval{l: 101, r: 101}: 2, - yyinterval{l: 48, r: 48}: 2, - yyinterval{l: 106, r: 107}: 2, - yyinterval{l: 110, r: 110}: 2, - yyinterval{l: 114, r: 114}: 2, - yyinterval{l: 104, r: 104}: 2, - yyinterval{l: 102, r: 102}: 2, - yyinterval{l: 99, r: 99}: 2, - yyinterval{l: 109, r: 109}: 2, - yyinterval{l: 120, r: 122}: 2, - yyinterval{l: 65, r: 90}: 2, - yyinterval{l: 117, r: 117}: 2, + 35: { + yyinterval{l: 54, r: 54}: 3, + yyinterval{l: 101, r: 101}: 3, + yyinterval{l: 108, r: 108}: 3, + yyinterval{l: 99, r: 99}: 3, + yyinterval{l: 120, r: 122}: 3, + yyinterval{l: 103, r: 103}: 3, + yyinterval{l: 53, r: 53}: 3, + yyinterval{l: 117, r: 117}: 3, + yyinterval{l: 97, r: 97}: 3, + yyinterval{l: 48, r: 48}: 3, + yyinterval{l: 118, r: 118}: 3, + yyinterval{l: 65, r: 90}: 3, + yyinterval{l: 115, r: 115}: 3, + yyinterval{l: 112, r: 113}: 3, + yyinterval{l: 100, r: 100}: 3, + yyinterval{l: 52, r: 52}: 36, + yyinterval{l: 102, r: 102}: 3, + yyinterval{l: 111, r: 111}: 3, + yyinterval{l: 110, r: 110}: 3, + yyinterval{l: 104, r: 104}: 3, + yyinterval{l: 114, r: 114}: 3, + yyinterval{l: 105, r: 105}: 3, + yyinterval{l: 116, r: 116}: 3, + yyinterval{l: 98, r: 98}: 3, + yyinterval{l: 49, r: 51}: 3, + yyinterval{l: 106, r: 107}: 3, + yyinterval{l: 55, r: 57}: 3, + yyinterval{l: 119, r: 119}: 3, + yyinterval{l: 109, r: 109}: 3, }, - 32: { - yyinterval{l: 49, r: 51}: 2, + 36: { + yyinterval{l: 120, r: 122}: 3, + yyinterval{l: 109, r: 109}: 3, + yyinterval{l: 112, r: 113}: 3, + yyinterval{l: 65, r: 90}: 3, + yyinterval{l: 99, r: 99}: 3, + yyinterval{l: 53, r: 53}: 3, + yyinterval{l: 102, r: 102}: 3, + yyinterval{l: 98, r: 98}: 3, + yyinterval{l: 101, r: 101}: 3, + yyinterval{l: 116, r: 116}: 3, + yyinterval{l: 118, r: 118}: 3, + yyinterval{l: 108, r: 108}: 3, + yyinterval{l: 100, r: 100}: 3, + yyinterval{l: 115, r: 115}: 3, + yyinterval{l: 52, r: 52}: 3, + yyinterval{l: 55, r: 57}: 3, + yyinterval{l: 104, r: 104}: 3, + yyinterval{l: 110, r: 110}: 3, + yyinterval{l: 97, r: 97}: 3, + yyinterval{l: 117, r: 117}: 3, + yyinterval{l: 105, r: 105}: 3, + yyinterval{l: 119, r: 119}: 3, + yyinterval{l: 49, r: 51}: 3, + yyinterval{l: 114, r: 114}: 3, + yyinterval{l: 103, r: 103}: 3, + yyinterval{l: 54, r: 54}: 3, + yyinterval{l: 48, r: 48}: 3, + yyinterval{l: 111, r: 111}: 3, + yyinterval{l: 106, r: 107}: 3, + }, + 38: { + yyinterval{l: 108, r: 108}: 3, + yyinterval{l: 65, r: 90}: 3, + yyinterval{l: 101, r: 101}: 3, + yyinterval{l: 49, r: 51}: 3, + yyinterval{l: 111, r: 111}: 3, + yyinterval{l: 53, r: 53}: 3, + yyinterval{l: 110, r: 110}: 3, + yyinterval{l: 52, r: 52}: 3, + yyinterval{l: 112, r: 113}: 3, + yyinterval{l: 99, r: 99}: 5, + yyinterval{l: 100, r: 100}: 3, + yyinterval{l: 120, r: 122}: 3, + yyinterval{l: 119, r: 119}: 3, + yyinterval{l: 115, r: 115}: 3, + yyinterval{l: 103, r: 103}: 3, + yyinterval{l: 54, r: 54}: 3, + yyinterval{l: 48, r: 48}: 3, + yyinterval{l: 106, r: 107}: 3, + yyinterval{l: 117, r: 117}: 3, + yyinterval{l: 104, r: 104}: 3, + yyinterval{l: 98, r: 98}: 3, + yyinterval{l: 102, r: 102}: 3, + yyinterval{l: 97, r: 97}: 3, + yyinterval{l: 55, r: 57}: 3, + yyinterval{l: 114, r: 114}: 3, + yyinterval{l: 118, r: 118}: 3, + yyinterval{l: 105, r: 105}: 3, + yyinterval{l: 109, r: 109}: 3, + yyinterval{l: 116, r: 116}: 3, + }, + 39: { + yyinterval{l: 97, r: 97}: 3, + yyinterval{l: 119, r: 119}: 3, + yyinterval{l: 48, r: 48}: 3, + yyinterval{l: 111, r: 111}: 3, + yyinterval{l: 109, r: 109}: 3, + yyinterval{l: 112, r: 113}: 3, + yyinterval{l: 103, r: 103}: 3, + yyinterval{l: 49, r: 51}: 3, + yyinterval{l: 120, r: 122}: 3, + yyinterval{l: 65, r: 90}: 3, + yyinterval{l: 106, r: 107}: 3, + yyinterval{l: 116, r: 116}: 3, + yyinterval{l: 105, r: 105}: 3, + yyinterval{l: 100, r: 100}: 3, + yyinterval{l: 99, r: 99}: 3, + yyinterval{l: 104, r: 104}: 3, + yyinterval{l: 114, r: 114}: 3, + yyinterval{l: 108, r: 108}: 3, + yyinterval{l: 55, r: 57}: 3, + yyinterval{l: 117, r: 117}: 3, + yyinterval{l: 52, r: 52}: 3, + yyinterval{l: 115, r: 115}: 3, + yyinterval{l: 102, r: 102}: 3, + yyinterval{l: 118, r: 118}: 3, + yyinterval{l: 110, r: 110}: 5, + yyinterval{l: 101, r: 101}: 3, + yyinterval{l: 53, r: 53}: 3, + yyinterval{l: 98, r: 98}: 3, + yyinterval{l: 54, r: 54}: 3, + }, + 40: { + yyinterval{l: 111, r: 111}: 3, + yyinterval{l: 108, r: 108}: 3, + yyinterval{l: 54, r: 54}: 3, + yyinterval{l: 119, r: 119}: 3, + yyinterval{l: 102, r: 102}: 3, + yyinterval{l: 97, r: 97}: 3, + yyinterval{l: 55, r: 57}: 3, + yyinterval{l: 114, r: 114}: 3, + yyinterval{l: 53, r: 53}: 3, yyinterval{l: 116, r: 116}: 6, - yyinterval{l: 119, r: 119}: 2, - yyinterval{l: 65, r: 90}: 2, - yyinterval{l: 97, r: 97}: 2, - yyinterval{l: 118, r: 118}: 2, - yyinterval{l: 115, r: 115}: 2, - yyinterval{l: 120, r: 122}: 2, - yyinterval{l: 101, r: 101}: 2, - yyinterval{l: 108, r: 108}: 2, - yyinterval{l: 110, r: 110}: 2, - yyinterval{l: 104, r: 104}: 2, - yyinterval{l: 48, r: 48}: 2, - yyinterval{l: 106, r: 107}: 2, - yyinterval{l: 103, r: 103}: 2, - yyinterval{l: 100, r: 100}: 2, - yyinterval{l: 102, r: 102}: 2, - yyinterval{l: 105, r: 105}: 2, - yyinterval{l: 117, r: 117}: 2, - yyinterval{l: 111, r: 111}: 2, - yyinterval{l: 99, r: 99}: 2, - yyinterval{l: 55, r: 57}: 2, - yyinterval{l: 54, r: 54}: 2, - yyinterval{l: 52, r: 52}: 2, - yyinterval{l: 53, r: 53}: 2, - yyinterval{l: 98, r: 98}: 2, - yyinterval{l: 112, r: 113}: 2, - yyinterval{l: 109, r: 109}: 2, - yyinterval{l: 114, r: 114}: 2, + yyinterval{l: 100, r: 100}: 3, + yyinterval{l: 120, r: 122}: 3, + yyinterval{l: 117, r: 117}: 3, + yyinterval{l: 105, r: 105}: 3, + yyinterval{l: 106, r: 107}: 3, + yyinterval{l: 110, r: 110}: 3, + yyinterval{l: 118, r: 118}: 3, + yyinterval{l: 112, r: 113}: 3, + yyinterval{l: 115, r: 115}: 3, + yyinterval{l: 48, r: 48}: 3, + yyinterval{l: 98, r: 98}: 3, + yyinterval{l: 49, r: 51}: 3, + yyinterval{l: 65, r: 90}: 3, + yyinterval{l: 109, r: 109}: 3, + yyinterval{l: 99, r: 99}: 3, + yyinterval{l: 52, r: 52}: 3, + yyinterval{l: 103, r: 103}: 3, + yyinterval{l: 104, r: 104}: 3, + yyinterval{l: 101, r: 101}: 3, }, - 33: { - yyinterval{l: 53, r: 53}: 2, - yyinterval{l: 120, r: 122}: 2, - yyinterval{l: 117, r: 117}: 2, - yyinterval{l: 65, r: 90}: 2, - yyinterval{l: 99, r: 99}: 2, - yyinterval{l: 112, r: 113}: 2, - yyinterval{l: 115, r: 115}: 2, - yyinterval{l: 110, r: 110}: 2, - yyinterval{l: 48, r: 48}: 2, - yyinterval{l: 118, r: 118}: 2, - yyinterval{l: 104, r: 104}: 2, - yyinterval{l: 114, r: 114}: 2, - yyinterval{l: 97, r: 97}: 2, - yyinterval{l: 106, r: 107}: 2, - yyinterval{l: 111, r: 111}: 2, - yyinterval{l: 108, r: 108}: 2, - yyinterval{l: 49, r: 51}: 2, - yyinterval{l: 109, r: 109}: 2, - yyinterval{l: 54, r: 54}: 2, - yyinterval{l: 98, r: 98}: 2, - yyinterval{l: 103, r: 103}: 2, - yyinterval{l: 55, r: 57}: 2, - yyinterval{l: 105, r: 105}: 2, - yyinterval{l: 119, r: 119}: 2, - yyinterval{l: 116, r: 116}: 2, - yyinterval{l: 102, r: 102}: 2, - yyinterval{l: 100, r: 100}: 2, - yyinterval{l: 101, r: 101}: 2, - yyinterval{l: 52, r: 52}: 27, + 41: { + yyinterval{l: 54, r: 54}: 3, + yyinterval{l: 48, r: 48}: 3, + yyinterval{l: 52, r: 52}: 3, + yyinterval{l: 65, r: 90}: 3, + yyinterval{l: 98, r: 98}: 3, + yyinterval{l: 117, r: 117}: 3, + yyinterval{l: 103, r: 103}: 3, + yyinterval{l: 53, r: 53}: 3, + yyinterval{l: 111, r: 111}: 3, + yyinterval{l: 119, r: 119}: 3, + yyinterval{l: 114, r: 114}: 3, + yyinterval{l: 115, r: 115}: 3, + yyinterval{l: 100, r: 100}: 3, + yyinterval{l: 106, r: 107}: 3, + yyinterval{l: 118, r: 118}: 3, + yyinterval{l: 55, r: 57}: 3, + yyinterval{l: 108, r: 108}: 3, + yyinterval{l: 104, r: 104}: 3, + yyinterval{l: 102, r: 102}: 3, + yyinterval{l: 105, r: 105}: 13, + yyinterval{l: 99, r: 99}: 3, + yyinterval{l: 112, r: 113}: 3, + yyinterval{l: 97, r: 97}: 3, + yyinterval{l: 110, r: 110}: 3, + yyinterval{l: 49, r: 51}: 3, + yyinterval{l: 109, r: 109}: 3, + yyinterval{l: 101, r: 101}: 3, + yyinterval{l: 116, r: 116}: 3, + yyinterval{l: 120, r: 122}: 3, }, - 34: { - yyinterval{l: 114, r: 114}: 2, - yyinterval{l: 104, r: 104}: 2, - yyinterval{l: 55, r: 57}: 2, - yyinterval{l: 98, r: 98}: 2, - yyinterval{l: 103, r: 103}: 2, - yyinterval{l: 97, r: 97}: 2, - yyinterval{l: 118, r: 118}: 2, - yyinterval{l: 54, r: 54}: 2, - yyinterval{l: 100, r: 100}: 2, - yyinterval{l: 49, r: 51}: 2, - yyinterval{l: 112, r: 113}: 2, - yyinterval{l: 111, r: 111}: 2, - yyinterval{l: 101, r: 101}: 2, - yyinterval{l: 117, r: 117}: 2, - yyinterval{l: 65, r: 90}: 2, - yyinterval{l: 48, r: 48}: 2, - yyinterval{l: 52, r: 52}: 2, - yyinterval{l: 53, r: 53}: 2, - yyinterval{l: 115, r: 115}: 2, - yyinterval{l: 99, r: 99}: 2, - yyinterval{l: 110, r: 110}: 2, - yyinterval{l: 116, r: 116}: 2, - yyinterval{l: 109, r: 109}: 2, - yyinterval{l: 119, r: 119}: 2, - yyinterval{l: 102, r: 102}: 2, - yyinterval{l: 108, r: 108}: 25, - yyinterval{l: 106, r: 107}: 2, - yyinterval{l: 120, r: 122}: 2, - yyinterval{l: 105, r: 105}: 2, + 42: { + yyinterval{l: 65, r: 90}: 3, + yyinterval{l: 100, r: 100}: 3, + yyinterval{l: 112, r: 113}: 3, + yyinterval{l: 53, r: 53}: 3, + yyinterval{l: 109, r: 109}: 3, + yyinterval{l: 110, r: 110}: 3, + yyinterval{l: 98, r: 98}: 3, + yyinterval{l: 54, r: 54}: 3, + yyinterval{l: 114, r: 114}: 3, + yyinterval{l: 108, r: 108}: 3, + yyinterval{l: 97, r: 97}: 3, + yyinterval{l: 116, r: 116}: 3, + yyinterval{l: 101, r: 101}: 5, + yyinterval{l: 111, r: 111}: 3, + yyinterval{l: 115, r: 115}: 3, + yyinterval{l: 55, r: 57}: 3, + yyinterval{l: 52, r: 52}: 3, + yyinterval{l: 106, r: 107}: 3, + yyinterval{l: 117, r: 117}: 3, + yyinterval{l: 49, r: 51}: 3, + yyinterval{l: 118, r: 118}: 3, + yyinterval{l: 99, r: 99}: 3, + yyinterval{l: 119, r: 119}: 3, + yyinterval{l: 120, r: 122}: 3, + yyinterval{l: 102, r: 102}: 3, + yyinterval{l: 105, r: 105}: 3, + yyinterval{l: 103, r: 103}: 3, + yyinterval{l: 48, r: 48}: 3, + yyinterval{l: 104, r: 104}: 3, }, } @@ -1059,10 +1081,40 @@ yystart: goto yystart case 11: { - return Hiragana, nil + return Operator, nil } goto yystart case 12: + { + return Operator, nil + } + goto yystart + case 13: + { + return Operator, nil + } + goto yystart + case 14: + { + return Operator, nil + } + goto yystart + case 15: + { + return Operator, nil + } + goto yystart + case 16: + { + return Operator, nil + } + goto yystart + case 17: + { + return Hiragana, nil + } + goto yystart + case 18: { } goto yystart diff --git a/sample/sample.l b/sample/sample.l index b2a10ac..1ef8d2b 100644 --- a/sample/sample.l +++ b/sample/sample.l @@ -24,18 +24,24 @@ const ( %} %% -"if|for|while|func|return" { return Keyword, nil } -"int|float64" { return Type, nil } -"[a-zA-Z][a-zA-Z0-9]*" { return Identifier, nil } -"[1-9][0-9]*" { return Digit, nil } -"[ \t\n\r]*" { } -"\\(" { return LParen, nil } -"\\)" { return RParen, nil } +if|for|while|func|return { return Keyword, nil } +int|float64 { return Type, nil } +[a-zA-Z][a-zA-Z0-9]* { return Identifier, nil } +[1-9][0-9]* { return Digit, nil } +[ \t\n\r]* { } +"(" { return LParen, nil } +")" { return RParen, nil } "{" { return LBracket, nil } "}" { return RBracket, nil } -"\\+|\\-|\\*|/|:=|==|!=" { return Operator, nil } -"[ぁ-ゔ]*" { return Hiragana, nil } -"." {} +"+" { return Operator, nil } +"-" { return Operator, nil } +"*" { return Operator, nil } +"/" { return Operator, nil } +":=" { return Operator, nil } +"==" { return Operator, nil } +"!=" { return Operator, nil } +[ぁ-ゔ]* { return Hiragana, nil } +. {} %% // This part is optional diff --git a/sample/word_counter/main.go b/sample/word_counter/main.go index 18d27f1..b9bf129 100644 --- a/sample/word_counter/main.go +++ b/sample/word_counter/main.go @@ -24,12 +24,12 @@ var ( // state id to regex id var yyStateIDToRegexID = []yyRegexID{ - 0, // state 0 は BH state - 1, - 2, + 0, // state 0 is dead state 1, 1, 3, + 2, + 1, } var yyFinStates = map[yyStateID]struct{}{ @@ -52,36 +52,36 @@ func (x yyinterval) overlap(y yyinterval) bool { var yyTransitionTable = map[yyStateID]map[yyinterval]yyStateID{ 1: { - yyinterval{l: 9, r: 9}: 3, - yyinterval{l: 10, r: 10}: 5, - yyinterval{l: 11, r: 12}: 2, - yyinterval{l: 13, r: 13}: 3, - yyinterval{l: 14, r: 31}: 2, - yyinterval{l: 32, r: 32}: 4, - yyinterval{l: 33, r: 1114111}: 2, - yyinterval{l: 0, r: 8}: 2, + yyinterval{l: 0, r: 8}: 4, + yyinterval{l: 9, r: 9}: 2, + yyinterval{l: 10, r: 10}: 3, + yyinterval{l: 11, r: 12}: 4, + yyinterval{l: 13, r: 13}: 2, + yyinterval{l: 14, r: 31}: 4, + yyinterval{l: 32, r: 32}: 5, + yyinterval{l: 33, r: 1114111}: 4, }, 2: { - yyinterval{l: 33, r: 1114111}: 2, - yyinterval{l: 0, r: 8}: 2, yyinterval{l: 9, r: 9}: 2, - yyinterval{l: 11, r: 12}: 2, + yyinterval{l: 11, r: 12}: 4, yyinterval{l: 13, r: 13}: 2, - yyinterval{l: 14, r: 31}: 2, - }, - 3: { - yyinterval{l: 9, r: 9}: 3, - yyinterval{l: 11, r: 12}: 2, - yyinterval{l: 13, r: 13}: 3, - yyinterval{l: 14, r: 31}: 2, - yyinterval{l: 32, r: 32}: 4, - yyinterval{l: 33, r: 1114111}: 2, - yyinterval{l: 0, r: 8}: 2, + yyinterval{l: 14, r: 31}: 4, + yyinterval{l: 32, r: 32}: 5, + yyinterval{l: 33, r: 1114111}: 4, + yyinterval{l: 0, r: 8}: 4, }, 4: { - yyinterval{l: 32, r: 32}: 4, - yyinterval{l: 9, r: 9}: 4, - yyinterval{l: 13, r: 13}: 4, + yyinterval{l: 14, r: 31}: 4, + yyinterval{l: 33, r: 1114111}: 4, + yyinterval{l: 0, r: 8}: 4, + yyinterval{l: 9, r: 9}: 4, + yyinterval{l: 11, r: 12}: 4, + yyinterval{l: 13, r: 13}: 4, + }, + 5: { + yyinterval{l: 9, r: 9}: 5, + yyinterval{l: 13, r: 13}: 5, + yyinterval{l: 32, r: 32}: 5, }, } diff --git a/sample/word_counter/wc.l b/sample/word_counter/wc.l index 8795be0..3b5d981 100644 --- a/sample/word_counter/wc.l +++ b/sample/word_counter/wc.l @@ -9,12 +9,12 @@ var nl = 0 %} %% -"[ \t\r]*" { nc++ } -"[^ \n]*" { +[ \t\r]* { nc++ } +[^ \n]* { nc += len([]rune(YYText)) nw++ } -"\n" { +\n { nl++ nc++ }