diff --git a/cmd/gokc/gokc.go b/cmd/gokc/gokc.go index 5dcede1..2c20053 100644 --- a/cmd/gokc/gokc.go +++ b/cmd/gokc/gokc.go @@ -1,6 +1,7 @@ package main import ( + "encoding/json" "flag" "fmt" "os" @@ -35,11 +36,15 @@ func init() { } func main() { - var filepath string - var isVersion bool + var ( + filepath string + isVersion bool + printJSON bool + ) flag.StringVar(&filepath, "f", "/etc/keepalived/keepalived.conf", "keepalived.conf file path") flag.BoolVar(&isVersion, "v", false, "print the version") flag.BoolVar(&log.IsVerbose, "V", false, "verbose log mode") + flag.BoolVar(&printJSON, "json", false, "print configuration as json") flag.Parse() if isVersion { @@ -57,7 +62,8 @@ func main() { } defer file.Close() - if err := parser.Parse(file, filepath); err != nil { + result, err := parser.Parse(file, filepath) + if err != nil { if e, ok := err.(*parser.Error); ok { msg := colorstring.Color(fmt.Sprintf("[white]%s:%d:%d: [red]%s[reset]", e.Filename, e.Line, e.Column, e.Message)) log.Error(msg) @@ -65,6 +71,15 @@ func main() { log.Error(err) } } + log.Debugf("%#v\n", result) - log.Infof("gokc: the configuration file %s syntax is ok", filepath) + if printJSON { + j, err := json.Marshal(result) + if err != nil { + log.Error(err) + } + fmt.Println(string(j)) + } else { + log.Infof("gokc: the configuration file %s syntax is ok", filepath) + } } diff --git a/parser/ast.go b/parser/ast.go new file mode 100644 index 0000000..2837396 --- /dev/null +++ b/parser/ast.go @@ -0,0 +1,50 @@ +package parser + +// Token represents the token of the configuration. +type Token struct { + tok int + lit string + filename string + line int + column int +} + +type Configuration struct { + Blocks []BlockAny +} + +type BlockAny interface{} //FIXME + +type Block struct { + name string // : vrrp_script { ... } + stmts []StmtAny +} + +type BlockArgs struct { // virtual_server { } + Name string `json:"name"` + Args []string `json:"args"` + Stmts []StmtAny `json:"stmts"` +} + +type SubBlockArgs BlockArgs // real_server { ... } + +type StmtAny interface{} //FIXME + +type Stmt struct { // state: MASTER + Key string `json:"key"` + Val Value `json:"value"` +} + +type StmtMulti struct { // virtual_ipaddress { vips } + Key string `json:"key"` + Vals []Value `json:"values"` +} + +type StmtValue = Value // static_ipaddress { address_options } + +type Value interface{} + +// VIPAddr represents virtual_ipaddress +type VIPAddr struct { + Addr string `json:"addr"` +} diff --git a/parser/json.go b/parser/json.go new file mode 100644 index 0000000..98f88f1 --- /dev/null +++ b/parser/json.go @@ -0,0 +1,21 @@ +package parser + +import "encoding/json" + +func (conf Configuration) MarshalJSON() ([]byte, error) { + return json.Marshal(struct { + Blocks []BlockAny `json:"blocks"` + }{ + Blocks: conf.Blocks, + }) +} + +func (b Block) MarshalJSON() ([]byte, error) { + return json.Marshal(struct { + Name string `json:"name"` + Stmts []StmtAny `json:"stmts"` + }{ + Name: b.name, + Stmts: b.stmts, + }) +} diff --git a/parser/lexer.go b/parser/lexer.go index 3be027b..4c0730c 100644 --- a/parser/lexer.go +++ b/parser/lexer.go @@ -258,7 +258,8 @@ func (t *Tokenizer) NextAll() ([]*Token, error) { } result = append(result, &Token{ - value: token, + tok: token, + lit: s, filename: t.filename, line: t.scanner.Line, column: t.scanner.Column, @@ -332,17 +333,11 @@ func (t *Tokenizer) scanInclude(rawfilename string) ([]*Token, error) { return result, nil } -type Token struct { - value int - filename string - line int - column int -} - type Lexer struct { tokens []*Token pos int e error + result []BlockAny } type Error struct { @@ -378,7 +373,8 @@ func (l *Lexer) Lex(lval *yySymType) int { return EOF } token := l.nextToken() - return token.value + lval.token = *token + return token.tok } func (l *Lexer) Error(msg string) { @@ -391,16 +387,16 @@ func (l *Lexer) Error(msg string) { } } -func Parse(src io.Reader, filename string) error { +func Parse(src io.Reader, filename string) (Configuration, error) { yyErrorVerbose = true t := NewTokenizer(src, filename) tokens, err := t.NextAll() if err != nil { - return err + return Configuration{}, err } l := NewLexer(tokens) if ret := yyParse(l); ret != 0 { - return l.e + return Configuration{}, l.e } - return l.e + return Configuration{Blocks: l.result}, l.e } diff --git a/parser/lexer_test.go b/parser/lexer_test.go index 7e0c8a1..afb9faf 100644 --- a/parser/lexer_test.go +++ b/parser/lexer_test.go @@ -57,7 +57,7 @@ func TestTokenizer_NextAll(t *testing.T) { } fmt.Printf("%+v", len(tokens)) for i, token := range tokens { - got, want := token.value, tt.toks[i] + got, want := token.tok, tt.toks[i] if got != want { t.Errorf("token got %v, want %v (%v)", got, want, i) } @@ -67,7 +67,7 @@ func TestTokenizer_NextAll(t *testing.T) { func TestNewLexer(t *testing.T) { tokens := []*Token{ - {VRRP_INSTANCE, "dummy.conf", 2, 10}, + {VRRP_INSTANCE, "vrrp_instance", "dummy.conf", 2, 10}, } l := NewLexer(tokens) if !reflect.DeepEqual(l.tokens, tokens) { diff --git a/parser/parser.go b/parser/parser.go index c3a1d4f..c4d82ff 100644 --- a/parser/parser.go +++ b/parser/parser.go @@ -6,9 +6,21 @@ import __yyfmt__ "fmt" //line parser/parser.go.y:2 //line parser/parser.go.y:5 type yySymType struct { - yys int - integer int - symbol string + yys int + string string + strings []string + token Token + block Block + blocks_any []BlockAny + block_args BlockArgs + subblock_args SubBlockArgs + stmt_any StmtAny + stmts_any []StmtAny + stmt Stmt + stmt_multi StmtMulti + stmt_value StmtValue + values []Value + vip_addr VIPAddr } const NUMBER = 57346 @@ -331,321 +343,307 @@ const yyEofCode = 1 const yyErrCode = 2 const yyInitialStackSize = 16 -//line parser/parser.go.y:381 +//line parser/parser.go.y:486 //line yacctab:1 var yyExca = [...]int{ -1, 1, 1, -1, -2, 0, - -1, 19, - 14, 127, - -2, 297, - -1, 202, - 15, 119, - -2, 120, } const yyPrivate = 57344 -const yyLast = 558 +const yyLast = 538 var yyAct = [...]int{ - 409, 489, 484, 63, 432, 421, 407, 398, 391, 370, - 335, 331, 208, 327, 182, 314, 320, 312, 310, 30, - 307, 183, 206, 33, 201, 279, 174, 54, 266, 184, - 34, 35, 64, 400, 59, 410, 143, 401, 402, 287, - 288, 394, 393, 486, 487, 488, 395, 135, 405, 95, - 403, 404, 396, 366, 60, 397, 218, 54, 217, 216, - 105, 434, 435, 436, 437, 115, 116, 34, 35, 118, - 119, 120, 34, 35, 333, 204, 215, 127, 76, 77, - 131, 133, 497, 107, 491, 69, 68, 72, 52, 203, - 60, 420, 213, 32, 61, 114, 62, 65, 66, 67, - 70, 71, 478, 419, 416, 415, 417, 418, 412, 414, - 73, 74, 456, 428, 411, 358, 359, 413, 467, 454, - 185, 186, 187, 188, 189, 427, 424, 423, 425, 426, - 429, 372, 430, 431, 420, 280, 281, 282, 329, 330, - 190, 191, 104, 12, 192, 193, 419, 416, 415, 417, - 418, 242, 243, 453, 230, 231, 126, 13, 14, 15, - 16, 334, 17, 373, 374, 375, 376, 377, 378, 379, - 37, 137, 445, 194, 195, 196, 197, 198, 199, 200, - 447, 227, 438, 31, 220, 390, 381, 130, 205, 176, - 177, 178, 179, 180, 181, 364, 289, 290, 263, 138, - 361, 356, 255, 354, 350, 345, 203, 343, 341, 87, - 301, 213, 296, 262, 60, 284, 18, 283, 254, 264, - 34, 35, 55, 20, 19, 226, 246, 297, 219, 129, - 302, 34, 35, 64, 247, 389, 311, 113, 495, 103, - 34, 35, 319, 318, 318, 86, 100, 388, 139, 140, - 141, 387, 142, 34, 35, 319, 322, 108, 109, 110, - 111, 112, 386, 326, 267, 268, 269, 270, 271, 272, - 273, 274, 275, 276, 277, 278, 57, 58, 493, 385, - 384, 89, 368, 56, 480, 494, 69, 68, 72, 88, - 367, 481, 101, 248, 33, 61, 323, 62, 65, 66, - 67, 70, 71, 324, 245, 241, 240, 239, 315, 316, - 339, 73, 232, 221, 85, 311, 317, 318, 81, 80, - 79, 349, 78, 25, 24, 318, 23, 22, 353, 342, - 344, 346, 90, 96, 213, 34, 35, 322, 351, 477, - 476, 355, 357, 360, 362, 34, 35, 365, 39, 40, - 45, 46, 47, 48, 49, 50, 41, 42, 43, 44, - 51, 209, 460, 210, 211, 34, 35, 214, 496, 212, - 34, 35, 134, 34, 35, 132, 337, 235, 380, 234, - 483, 382, 34, 35, 128, 34, 35, 117, 340, 123, - 482, 124, 34, 35, 406, 352, 348, 347, 309, 295, - 294, 439, 291, 256, 253, 252, 251, 446, 250, 249, - 233, 229, 225, 224, 223, 455, 222, 122, 121, 461, - 106, 463, 99, 98, 83, 36, 28, 469, 468, 471, - 27, 26, 475, 474, 473, 472, 470, 466, 479, 465, - 464, 462, 459, 458, 457, 452, 451, 450, 449, 448, - 444, 443, 442, 441, 440, 383, 369, 490, 145, 146, - 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, - 157, 158, 159, 160, 161, 162, 363, 338, 163, 164, - 165, 306, 305, 304, 303, 300, 299, 298, 492, 293, - 292, 490, 498, 285, 265, 261, 260, 259, 258, 257, - 244, 238, 166, 167, 168, 169, 170, 171, 172, 173, - 237, 236, 228, 125, 102, 97, 94, 93, 92, 91, - 84, 82, 1, 53, 207, 21, 321, 313, 433, 422, - 408, 485, 399, 392, 371, 286, 29, 202, 175, 336, - 332, 328, 325, 144, 308, 136, 75, 38, 11, 10, - 9, 8, 7, 6, 5, 4, 3, 2, + 397, 477, 472, 62, 420, 409, 395, 386, 379, 360, + 330, 326, 207, 322, 181, 311, 309, 306, 182, 205, + 200, 265, 278, 30, 173, 142, 134, 53, 33, 34, + 63, 357, 388, 183, 286, 287, 389, 390, 217, 216, + 58, 422, 423, 424, 425, 328, 215, 393, 94, 391, + 392, 214, 382, 381, 444, 398, 53, 383, 59, 104, + 474, 475, 476, 384, 114, 115, 385, 485, 117, 118, + 119, 33, 34, 479, 203, 466, 126, 75, 76, 130, + 132, 324, 325, 68, 67, 71, 73, 455, 202, 442, + 416, 212, 60, 59, 61, 64, 65, 66, 69, 70, + 113, 408, 415, 412, 411, 413, 414, 417, 72, 418, + 419, 408, 362, 407, 404, 403, 405, 406, 184, 185, + 186, 187, 188, 407, 404, 403, 405, 406, 400, 402, + 33, 34, 329, 441, 399, 136, 106, 401, 189, 190, + 349, 350, 191, 192, 363, 364, 365, 366, 367, 368, + 369, 241, 242, 229, 230, 433, 32, 279, 280, 281, + 36, 129, 219, 137, 12, 426, 370, 355, 51, 226, + 352, 193, 194, 195, 196, 197, 198, 199, 13, 14, + 15, 16, 347, 17, 33, 34, 318, 204, 175, 176, + 177, 178, 179, 180, 345, 288, 289, 262, 86, 254, + 107, 108, 109, 110, 111, 202, 344, 339, 125, 282, + 212, 283, 138, 139, 140, 337, 141, 59, 33, 34, + 63, 103, 296, 335, 263, 208, 301, 209, 210, 33, + 34, 213, 300, 211, 295, 310, 435, 18, 261, 314, + 315, 253, 317, 317, 20, 19, 31, 316, 33, 34, + 54, 225, 218, 128, 112, 319, 102, 85, 378, 321, + 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, + 276, 277, 245, 68, 67, 71, 377, 376, 375, 374, + 246, 373, 60, 88, 61, 64, 65, 66, 69, 70, + 481, 87, 468, 358, 247, 244, 240, 482, 72, 469, + 100, 239, 238, 231, 56, 57, 220, 84, 80, 79, + 78, 55, 77, 25, 310, 24, 317, 23, 22, 483, + 343, 33, 34, 133, 99, 336, 89, 338, 340, 212, + 33, 34, 131, 33, 34, 127, 346, 348, 351, 353, + 33, 34, 356, 38, 39, 44, 45, 46, 47, 48, + 49, 40, 41, 42, 43, 50, 33, 34, 116, 95, + 465, 33, 34, 234, 122, 233, 123, 464, 448, 332, + 342, 371, 341, 308, 294, 293, 290, 255, 252, 251, + 250, 249, 248, 394, 232, 228, 224, 223, 222, 427, + 221, 121, 120, 105, 98, 434, 97, 83, 35, 28, + 27, 26, 484, 443, 471, 470, 463, 449, 462, 451, + 461, 460, 458, 454, 52, 457, 456, 459, 453, 452, + 450, 447, 446, 445, 440, 439, 467, 438, 437, 436, + 432, 431, 430, 429, 428, 372, 359, 354, 334, 333, + 305, 304, 303, 302, 299, 478, 144, 145, 146, 147, + 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, + 158, 159, 160, 161, 298, 297, 162, 163, 164, 292, + 291, 284, 264, 260, 259, 258, 480, 257, 256, 478, + 486, 243, 237, 236, 235, 227, 124, 101, 96, 93, + 165, 166, 167, 168, 169, 170, 171, 172, 92, 91, + 90, 82, 81, 1, 206, 473, 21, 331, 327, 323, + 320, 307, 37, 285, 313, 29, 312, 421, 410, 396, + 387, 380, 361, 74, 201, 174, 135, 143, 10, 11, + 9, 7, 6, 5, 4, 8, 3, 2, } var yyPact = [...]int{ - 127, -1000, 127, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 313, 312, 310, 309, 425, 424, 420, 59, - 419, -1000, 331, 212, 223, 5, 308, 306, 305, 304, - -1000, 517, 418, 516, -1000, -1000, 300, 230, 331, 275, - 325, 515, 514, 513, 512, 327, 511, 417, 416, 238, - 283, 510, 224, 212, -1000, -1000, 337, 414, 191, 222, - 223, 337, 377, -1000, -1000, 337, 337, 337, 412, 411, - 385, 509, 191, 374, 214, 5, 365, 362, 165, 422, - 99, 22, -1000, -1000, -1000, 64, -1000, -1000, 357, -1000, + 148, -1000, 148, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 304, 303, 301, 299, 395, 394, 393, 122, + 392, -1000, 326, 240, 210, 4, 298, 296, 295, 294, + 498, 497, 391, -1000, -1000, 293, 242, 326, 277, 319, + 496, 495, 494, 485, 353, 484, 390, 388, 316, 291, + 483, 241, 240, -1000, -1000, 332, 387, 134, 239, 210, + 332, 348, -1000, -1000, 332, 332, 332, 386, 385, 360, + 482, 134, 325, 238, 4, 322, 313, 129, 410, 98, + 20, -1000, -1000, -1000, 63, -1000, -1000, 221, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -2, -19, -20, -22, 213, 165, -1000, 299, 410, - 408, 407, 406, 210, 422, -1000, 508, -1000, -1000, 405, - 337, 337, 298, 404, 373, -1000, 507, 506, 497, 293, - 292, 291, 97, 496, -1000, 290, 220, 279, -1000, 403, - 402, 400, 399, 398, 203, 99, 397, 495, 494, 493, - 492, 491, 198, 22, 223, 490, 161, 20, 161, 20, - 489, -81, 337, 337, 396, -1000, -1000, 486, 485, 394, - 393, 197, 64, 483, 482, 481, 195, 357, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 480, 479, 478, 477, -1000, - -1000, 392, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 337, -1000, -1000, -1000, -1000, -1000, -1000, 245, - 232, 22, -1000, -1000, -1000, 79, -1000, 68, 370, -1000, + -27, -32, -39, -40, 237, 129, -1000, 292, 384, 382, + 381, 380, 236, 410, -1000, 481, -1000, -1000, 379, 332, + 332, 289, 378, 359, -1000, 480, 479, 478, 288, 287, + 282, 97, 477, -1000, 281, 266, 280, -1000, 376, 375, + 374, 373, 372, 226, 98, 371, 474, 473, 471, 470, + 469, 223, 20, 210, 468, 157, 42, 157, 42, 467, + -86, 332, 332, 370, -1000, -1000, 466, 465, 369, 368, + 219, 63, 461, 460, 440, 217, 221, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, 439, 438, 437, 436, -1000, -1000, + 367, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, 332, -1000, -1000, -1000, -1000, -1000, -1000, 176, 176, + 20, -1000, -1000, -1000, 22, -1000, 39, 363, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 473, - 384, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, 193, 392, -1000, - 192, 337, 190, 245, -1000, 391, 390, 337, -1000, -1000, - 189, 232, -1000, 389, 337, 188, 22, 186, 79, 54, - 357, 185, 68, -1000, 472, 180, 370, -40, -1000, 276, - 268, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 435, 434, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, 452, 38, 38, -1000, - 171, 38, 451, -1000, 266, 265, 248, 237, 233, 221, - 170, -1000, -1000, -1000, -95, -99, -99, -33, -11, -84, - -1000, 167, -95, 450, 449, 448, 447, 446, 157, -99, - 166, 445, 444, 443, 442, 441, 138, 104, -33, -1000, - 98, 440, 439, 438, 356, 337, 437, 337, 436, 435, - 433, 103, -11, 337, 432, 337, 431, 430, 429, 428, - 334, 333, 87, -84, 278, 386, 376, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -90, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, 10, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, 208, 367, -1000, 200, + 332, 192, 176, -1000, 366, 364, 332, -1000, -1000, 191, + 179, 20, 167, 22, 79, 221, 155, 39, -1000, 433, + 152, 363, -62, -1000, 279, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, 432, 19, -1000, + 151, 19, 431, -1000, 267, 265, 264, 263, 262, 244, + -1000, -1000, -1000, -84, -100, -100, -13, -34, -104, 150, + -84, 430, 429, 428, 427, 426, 140, -100, 222, 425, + 424, 423, 421, 420, 118, 74, -13, -1000, 40, 419, + 418, 417, 362, 332, 416, 332, 415, 414, 409, 72, + -34, 332, 408, 332, 407, 406, 404, 402, 361, 354, + 60, -104, 286, 401, 400, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -73, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -23, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, 69, -90, 272, 226, 364, 67, - 10, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 58, -73, 284, 307, 398, 52, -23, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, } var yyPgo = [...]int{ - 0, 522, 557, 556, 555, 554, 553, 552, 551, 550, - 549, 548, 170, 547, 22, 3, 88, 34, 111, 546, - 47, 545, 20, 544, 36, 543, 18, 17, 16, 542, - 13, 11, 10, 541, 12, 540, 539, 26, 538, 21, - 14, 29, 24, 537, 536, 19, 28, 25, 535, 9, - 534, 8, 7, 6, 5, 4, 533, 532, 2, 531, - 530, 0, 1, 529, 528, 527, 526, 15, 524, 523, - 83, + 0, 503, 537, 536, 535, 534, 533, 532, 531, 530, + 529, 528, 160, 25, 26, 24, 168, 40, 86, 20, + 14, 9, 8, 7, 6, 5, 4, 527, 526, 525, + 524, 18, 33, 523, 522, 521, 520, 519, 518, 517, + 15, 516, 515, 514, 3, 21, 22, 513, 512, 19, + 17, 511, 16, 510, 13, 11, 10, 509, 12, 508, + 507, 2, 505, 0, 1, 504, 414, 136, 414, } var yyR1 = [...]int{ 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 3, 12, 12, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 4, 5, 6, 18, 18, 7, 20, 20, - 21, 21, 21, 21, 21, 21, 21, 22, 22, 23, - 8, 24, 24, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 30, 30, 33, 33, - 33, 33, 31, 31, 35, 35, 26, 26, 32, 32, - 36, 36, 36, 9, 37, 37, 38, 38, 38, 38, - 38, 38, 38, 29, 29, 39, 39, 11, 42, 42, - 43, 43, 43, 43, 10, 40, 40, 44, 44, 44, - 44, 39, 39, 39, 39, 39, 39, 39, 39, 39, - 39, 39, 39, 39, 39, 39, 39, 39, 39, 49, - 49, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 51, 51, 56, 56, 56, 56, 56, 56, 52, 52, - 57, 57, 57, 57, 57, 57, 57, 58, 58, 59, - 59, 59, 59, 59, 53, 53, 60, 60, 60, 60, - 60, 60, 60, 62, 62, 61, 61, 61, 61, 61, - 61, 61, 54, 54, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 55, 55, 64, 64, 64, 64, - 64, 64, 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 47, 47, 47, 47, 48, - 48, 48, 27, 27, 28, 28, 65, 65, 65, 65, - 66, 66, 66, 14, 14, 68, 16, 16, 69, 69, - 69, 69, 69, 69, 17, 17, 41, 41, 41, 41, - 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, - 41, 41, 41, 19, 19, 19, 19, 19, 70, 70, - 70, 70, 70, 70, 67, 67, 67, 15, 15, 15, - 45, 45, 45, 34, 34, 34, 34, 34, 34, 34, + 2, 2, 3, 12, 12, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 5, 6, 7, 18, 18, 8, 14, 14, 28, + 28, 28, 28, 28, 28, 28, 50, 50, 51, 4, + 13, 13, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 54, 54, 57, 57, 57, + 57, 55, 55, 59, 59, 52, 52, 56, 56, 60, + 60, 60, 9, 15, 15, 29, 29, 29, 29, 29, + 29, 29, 53, 53, 31, 31, 10, 19, 19, 30, + 30, 30, 30, 11, 20, 20, 42, 42, 42, 31, + 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 21, 21, 34, 34, 34, + 34, 34, 34, 34, 34, 22, 22, 35, 35, 35, + 35, 35, 23, 23, 36, 36, 36, 36, 36, 36, + 61, 61, 62, 62, 62, 62, 62, 24, 24, 37, + 37, 37, 37, 37, 37, 37, 64, 64, 63, 63, + 63, 63, 63, 63, 63, 25, 25, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 26, 26, 39, + 39, 39, 39, 39, 39, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 46, 46, 46, + 47, 47, 40, 40, 41, 41, 41, 41, 49, 49, + 65, 16, 16, 66, 66, 66, 66, 66, 66, 17, + 17, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 33, 33, + 33, 33, 67, 67, 67, 67, 67, 67, 43, 43, + 44, 44, 68, 68, 68, 58, 58, 58, 58, 58, + 58, 58, } var yyR2 = [...]int{ - 0, 2, 1, 0, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 4, 2, 1, 0, 4, 2, 2, + 0, 2, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 4, 2, 1, 0, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 4, 4, 4, 2, 1, 5, 2, 1, - 0, 1, 4, 2, 2, 2, 2, 2, 1, 1, - 5, 2, 1, 0, 1, 2, 1, 1, 2, 2, - 2, 4, 2, 2, 2, 1, 2, 2, 2, 4, - 4, 4, 2, 2, 2, 1, 4, 2, 4, 4, - 1, 2, 2, 2, 2, 2, 2, 1, 0, 2, - 2, 2, 2, 1, 1, 2, 2, 1, 2, 1, - 0, 1, 3, 5, 2, 1, 0, 2, 2, 2, - 2, 2, 2, 2, 1, 2, 1, 5, 2, 1, - 0, 2, 2, 2, 5, 2, 1, 0, 1, 2, - 2, 0, 2, 2, 2, 2, 2, 2, 2, 3, - 6, 6, 2, 1, 1, 2, 2, 2, 2, 2, - 1, 0, 2, 1, 4, 4, 4, 4, 4, 4, - 2, 1, 0, 2, 2, 2, 2, 2, 2, 1, - 0, 4, 2, 2, 2, 2, 2, 2, 1, 0, - 2, 2, 2, 2, 2, 1, 0, 1, 4, 2, - 2, 2, 2, 2, 1, 0, 2, 2, 2, 2, - 2, 2, 2, 1, 0, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 1, 0, 2, 2, 2, - 2, 1, 0, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, - 1, 1, 2, 1, 2, 1, 1, 2, 2, 2, - 1, 2, 2, 2, 1, 1, 2, 1, 0, 1, - 1, 2, 2, 2, 2, 1, 0, 2, 2, 2, - 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 0, 4, 4, 4, 4, 0, 1, - 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, - 0, 1, 2, 0, 1, 1, 1, 1, 1, 1, + 2, 4, 4, 4, 2, 1, 5, 2, 1, 0, + 1, 4, 2, 2, 2, 2, 2, 1, 1, 5, + 2, 1, 0, 1, 2, 1, 1, 2, 2, 2, + 4, 2, 2, 2, 1, 2, 2, 2, 4, 4, + 4, 2, 2, 2, 1, 4, 2, 4, 4, 1, + 2, 2, 2, 2, 2, 2, 1, 0, 2, 2, + 2, 2, 1, 1, 2, 2, 1, 2, 1, 0, + 1, 3, 5, 2, 1, 0, 2, 2, 2, 2, + 2, 2, 2, 1, 2, 1, 5, 2, 1, 0, + 2, 2, 2, 5, 2, 1, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 3, 6, 2, 1, + 1, 2, 2, 2, 2, 2, 1, 2, 1, 4, + 4, 4, 4, 4, 4, 2, 1, 2, 2, 2, + 2, 2, 2, 1, 4, 2, 2, 2, 2, 2, + 2, 1, 0, 2, 2, 2, 2, 2, 1, 0, + 1, 4, 2, 2, 2, 2, 2, 1, 0, 2, + 2, 2, 2, 2, 2, 2, 1, 0, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 1, 0, + 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 2, 1, 1, 2, 2, 2, 2, 1, + 1, 2, 1, 0, 1, 1, 2, 2, 2, 2, + 1, 0, 2, 2, 2, 1, 1, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, + 4, 4, 0, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 0, 1, 2, 0, 1, 1, 1, 1, + 1, 1, } var yyChk = [...]int{ - -1000, -1, -2, -3, -4, -5, -6, -7, -8, -9, - -10, -11, 16, 30, 31, 32, 33, 35, 89, 97, - 96, -1, 14, 14, 14, 14, 6, 6, 6, -44, - -45, 124, 34, -15, 8, 9, 6, -12, -13, 17, - 18, 25, 26, 27, 28, 19, 20, 21, 22, 23, - 24, 29, -16, -69, -15, 10, 71, 64, 65, -17, - -41, 72, 74, -15, 10, 75, 76, 77, 64, 63, - 78, 79, 65, 88, -18, -19, 73, 74, 14, 14, - 14, 14, 4, 6, 4, 14, 15, -12, 14, 6, - 7, 4, 4, 4, 4, -15, 6, 4, 6, 6, - 8, 9, 4, 15, -16, -15, 6, -70, 66, 67, - 68, 69, 70, 15, -17, -15, -15, 10, -15, -15, - -15, 6, 6, 4, 6, 4, -70, -15, 10, 15, - -18, -15, 10, -15, 10, -20, -21, 6, 34, 83, - 84, 85, 87, -24, -25, 36, 37, 38, 39, 40, - 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, - 51, 52, 53, 56, 57, 58, 80, 81, 82, 83, - 84, 85, 86, 87, -37, -38, 90, 91, 92, 93, - 94, 95, -40, -39, -41, 98, 99, 100, 101, 102, - 118, 119, 122, 123, 151, 152, 153, 154, 155, 156, - 157, -42, -43, -15, 11, 124, -14, -68, -34, 4, - 6, 7, 12, -15, 10, 78, 78, 78, 78, 15, - -20, 14, 6, 6, 6, 6, 15, -24, 4, 6, - -15, -15, 14, 6, 6, 4, 4, 4, 4, 14, - 14, 14, 54, 55, 4, 14, 6, 14, 14, 6, - 6, 6, 6, 6, 15, -37, 6, 4, 4, 4, - 4, 4, 15, -40, -17, 4, -46, 103, 104, 105, - 106, 107, 108, 109, 110, 111, 112, 113, 114, -47, - 115, 116, 117, -46, -47, 4, -48, 120, 121, -15, - -15, 6, 4, 4, 6, 6, 15, -42, 4, 4, - 4, 15, -14, 4, 4, 4, 4, -22, -23, 6, - -26, -15, -27, -65, -67, 63, 64, 71, -15, 10, - -28, -66, -67, 64, 71, -29, -39, -30, -33, 59, - 60, -31, -35, 6, 93, -32, -36, 6, 4, -45, - 4, 15, -22, 15, -26, 15, -27, 6, 6, -15, - 15, -28, 6, -15, 15, -40, 15, -30, 61, 62, - -34, 15, -31, 4, 15, -32, 93, 14, 14, 4, - -49, -50, 93, 125, 126, 127, 128, 129, 130, 131, - -49, 15, -49, 4, 14, 14, 14, 14, 14, 14, - 15, -51, -56, 137, 136, 141, 147, 150, -52, -57, - 132, 136, 137, 149, 150, 147, -52, -53, -60, -61, - 68, 147, 141, 150, 142, 138, 137, 139, 140, 136, - 124, -54, -63, 138, 137, 139, 140, 136, 124, 141, - 143, 144, -55, -64, 145, 146, 147, 148, 15, -51, - 4, 4, 4, 4, 4, 15, -52, 14, 4, 4, - 4, 4, 4, 15, 15, -53, 14, 4, 4, 4, - 6, -15, 4, -15, 4, 4, 4, 15, -54, -15, - 4, -15, 4, 4, 4, 4, 6, 6, 15, -55, - 6, 13, 4, 4, -58, -59, 133, 134, 135, -62, - -61, 15, -58, 6, 13, 12, 4, 15, -62, + -1000, -1, -2, -3, -5, -6, -7, -8, -4, -9, + -11, -10, 16, 30, 31, 32, 33, 35, 89, 97, + 96, -1, 14, 14, 14, 14, 6, 6, 6, -42, + -44, 124, 34, 8, 9, 6, -12, -48, 17, 18, + 25, 26, 27, 28, 19, 20, 21, 22, 23, 24, + 29, -16, -66, -44, 10, 71, 64, 65, -17, -32, + 72, 74, -44, 10, 75, 76, 77, 64, 63, 78, + 79, 65, 88, -18, -33, 73, 74, 14, 14, 14, + 14, 4, 4, 6, 14, 15, -12, 14, 6, 7, + 4, 4, 4, 4, -44, 6, 4, 6, 6, 8, + 9, 4, 15, -16, -44, 6, -67, 66, 67, 68, + 69, 70, 15, -17, -44, -44, 10, -44, -44, -44, + 6, 6, 4, 6, 4, -67, -44, 10, 15, -18, + -44, 10, -44, 10, -14, -28, 6, 34, 83, 84, + 85, 87, -13, -27, 36, 37, 38, 39, 40, 41, + 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, + 52, 53, 56, 57, 58, 80, 81, 82, 83, 84, + 85, 86, 87, -15, -29, 90, 91, 92, 93, 94, + 95, -20, -31, -32, 98, 99, 100, 101, 102, 118, + 119, 122, 123, 151, 152, 153, 154, 155, 156, 157, + -19, -30, -44, 11, 124, -49, -65, -58, 4, 6, + 7, 12, -44, 10, 78, 78, 78, 78, 15, -14, + 14, 6, 6, 6, 6, 15, -13, 4, 6, -44, + -44, 14, 6, 6, 4, 4, 4, 4, 14, 14, + 14, 54, 55, 4, 14, 6, 14, 14, 6, 6, + 6, 6, 6, 15, -15, 6, 4, 4, 4, 4, + 4, 15, -20, -17, 4, -45, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, -46, 115, + 116, 117, -45, -46, 4, -47, 120, 121, -44, -44, + 6, 4, 4, 6, 6, 15, -19, 4, 4, 4, + 15, -49, 4, 4, 4, 4, -50, -51, 6, -52, + -44, -40, -41, -43, 63, 64, 71, -44, 10, -40, + -53, -31, -54, -57, 59, 60, -55, -59, 6, 93, + -56, -60, 6, 4, 4, 15, -50, 15, -52, 15, + -40, 6, 6, -44, 15, 15, -20, 15, -54, 61, + 62, -58, 15, -55, 4, 15, -56, 93, 14, 4, + -21, -34, 93, 125, 126, 127, 128, 129, 130, 131, + 15, -21, 4, 14, 14, 14, 14, 14, 14, -22, + -35, 137, 136, 141, 147, 150, -23, -36, 132, 136, + 137, 149, 150, 147, -23, -24, -37, -63, 68, 147, + 141, 150, 142, 138, 137, 139, 140, 136, 124, -25, + -38, 138, 137, 139, 140, 136, 124, 141, 143, 144, + -26, -39, 145, 146, 147, 148, 15, -22, 4, 4, + 4, 4, 4, 15, -23, 14, 4, 4, 4, 4, + 4, 15, 15, -24, 14, 4, 4, 4, 6, -44, + 4, -44, 4, 4, 4, 15, -25, -44, 4, -44, + 4, 4, 4, 4, 6, 6, 15, -26, 6, 13, + 4, 4, -61, -62, 133, 134, 135, -64, -63, 15, + -61, 6, 13, 12, 4, 15, -64, } var yyDef = [...]int{ - 3, -2, 2, 4, 5, 6, 7, 8, 9, 10, - 11, 12, 0, 0, 0, 0, 0, 0, 0, -2, - 0, 1, 16, 258, 266, 283, 0, 0, 0, 0, - 128, 0, 0, 301, 298, 299, 0, 0, 15, 0, - 0, 0, 0, 0, 0, 297, 0, 0, 0, 0, - 0, 0, 0, 257, 259, 260, 297, 0, 288, 0, - 265, 297, 297, 270, 271, 297, 297, 297, 0, 0, - 0, 0, 288, 297, 0, 36, 297, 297, 40, 53, - 106, 131, 129, 130, 302, 120, 13, 14, 297, 18, + 0, -2, 2, 3, 4, 5, 6, 7, 8, 9, + 10, 11, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 15, 243, 251, 0, 0, 0, 0, 0, + 0, 0, 0, 280, 281, 0, 0, 14, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 242, 244, 245, 0, 0, 272, 0, 250, + 0, 0, 255, 256, 0, 0, 0, 0, 0, 0, + 0, 272, 0, 0, 35, 0, 0, 39, 52, 105, + 251, 126, 127, 128, 119, 12, 13, 285, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, - 29, 30, 31, 32, 256, 261, 262, 263, 289, 290, - 291, 292, 293, 33, 264, 267, 268, 269, 272, 273, - 274, 275, 276, 277, 278, 279, 280, 281, 282, 34, - 35, 0, 0, 0, 0, 0, 39, 41, 0, 0, - 0, 0, 0, 0, 52, 54, 0, 56, 57, 0, - 297, 297, 0, 0, 0, 65, 0, 0, 0, 0, - 0, 0, 0, 0, 75, 0, 0, 0, 80, 0, - 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, - 0, 0, 0, 126, 116, 0, 222, 235, 222, 235, - 0, 239, 297, 297, 0, 143, 144, 0, 0, 0, - 0, 0, -2, 0, 0, 0, 0, 254, 255, 304, - 305, 306, 307, 308, 309, 0, 0, 0, 0, 37, - 38, 0, 43, 44, 45, 46, 50, 51, 55, 58, - 59, 60, 297, 62, 63, 64, 66, 67, 68, 294, - 294, 131, 72, 73, 74, 88, 77, 0, 100, 81, - 82, 83, 84, 85, 103, 104, 107, 108, 109, 110, - 111, 112, 124, 125, 115, 132, 133, 223, 224, 225, - 226, 227, 228, 229, 230, 231, 232, 233, 234, 134, - 236, 237, 238, 135, 136, 137, 138, 240, 241, 0, - 297, 142, 145, 146, 147, 148, 117, 118, 121, 122, - 123, 17, 253, 284, 286, 285, 287, 0, 48, 49, - 0, 97, 0, 243, 246, 0, 0, 297, 295, 296, - 0, 245, 250, 0, 297, 0, 114, 0, 87, 0, - 297, 0, 93, 94, 0, 0, 99, 101, 139, 0, - 0, 42, 47, 61, 96, 69, 242, 247, 248, 249, - 70, 244, 251, 252, 71, 113, 76, 86, 89, 90, - 91, 78, 92, 95, 79, 98, 0, 151, 151, 102, - 0, 150, 0, 153, 0, 0, 0, 0, 0, 0, - 0, 140, 149, 152, 162, 170, 170, 186, 204, 216, - 141, 0, 161, 0, 0, 0, 0, 0, 0, 169, - 0, 0, 0, 0, 0, 0, 0, 0, 185, 187, - 0, 0, 0, 0, 0, 297, 0, 297, 0, 0, - 0, 0, 203, 297, 0, 297, 0, 0, 0, 0, - 0, 0, 0, 215, 0, 0, 0, 221, 154, 160, - 163, 164, 165, 166, 167, 155, 168, 179, 172, 173, - 174, 175, 176, 156, 157, 184, 195, 189, 190, 191, - 192, 196, 197, 198, 199, 200, 201, 158, 202, 205, - 206, 207, 208, 209, 210, 211, 212, 213, 159, 214, - 217, 218, 219, 220, 0, 178, 0, 0, 0, 0, - 194, 171, 177, 180, 181, 182, 183, 188, 193, + 29, 30, 31, 241, 246, 247, 248, 273, 274, 275, + 276, 277, 32, 249, 252, 253, 254, 257, 258, 259, + 260, 261, 262, 263, 264, 265, 266, 267, 33, 34, + 0, 0, 0, 0, 0, 38, 40, 0, 0, 0, + 0, 0, 0, 51, 53, 0, 55, 56, 0, 0, + 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, + 0, 0, 0, 74, 0, 0, 0, 79, 0, 0, + 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, + 0, 0, 125, 115, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 139, 140, 0, 0, 0, 0, + 0, 118, 0, 0, 0, 0, 239, 240, 286, 287, + 288, 289, 290, 291, 0, 0, 0, 0, 36, 37, + 0, 42, 43, 44, 45, 49, 50, 54, 57, 58, + 59, 0, 61, 62, 63, 65, 66, 67, 0, 0, + 251, 71, 72, 73, 87, 76, 0, 99, 80, 81, + 82, 83, 84, 102, 103, 106, 107, 108, 109, 110, + 111, 123, 124, 114, 129, 130, 215, 216, 217, 218, + 219, 220, 221, 222, 223, 224, 225, 226, 131, 227, + 228, 229, 132, 133, 134, 135, 230, 231, 0, 0, + 138, 141, 142, 143, 144, 116, 117, 120, 121, 122, + 16, 238, 268, 270, 269, 271, 0, 47, 48, 0, + 96, 0, 233, 234, 0, 0, 0, 278, 279, 0, + 0, 113, 0, 86, 0, 285, 0, 92, 93, 0, + 0, 98, 100, 136, 0, 41, 46, 60, 95, 68, + 232, 235, 236, 237, 69, 70, 112, 75, 85, 88, + 89, 90, 77, 91, 94, 78, 97, 0, 0, 101, + 0, 146, 0, 148, 0, 0, 0, 0, 0, 0, + 137, 145, 147, 0, 0, 0, 179, 197, 209, 0, + 156, 0, 0, 0, 0, 0, 0, 163, 0, 0, + 0, 0, 0, 0, 0, 0, 178, 180, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 208, 0, 0, 0, 214, 149, 155, 157, 158, + 159, 160, 161, 150, 162, 172, 165, 166, 167, 168, + 169, 151, 152, 177, 188, 182, 183, 184, 185, 189, + 190, 191, 192, 193, 194, 153, 195, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 154, 207, 210, 211, + 212, 213, 0, 171, 0, 0, 0, 0, 187, 164, + 170, 173, 174, 175, 176, 181, 186, } var yyTok1 = [...]int{ @@ -1011,989 +1009,1382 @@ yydefault: // dummy call; replaced with literal code switch yynt { + case 1: + yyDollar = yyS[yypt-2 : yypt+1] + //line parser/parser.go.y:37 + { + yyVAL.blocks_any = append(yyDollar[1].blocks_any, yyDollar[2].blocks_any...) + yylex.(*Lexer).result = yyVAL.blocks_any + } case 2: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.go.y:29 + //line parser/parser.go.y:42 { + yyVAL.blocks_any = yyDollar[1].blocks_any + yylex.(*Lexer).result = yyVAL.blocks_any } case 3: - yyDollar = yyS[yypt-0 : yypt+1] - //line parser/parser.go.y:31 + yyDollar = yyS[yypt-1 : yypt+1] + //line parser/parser.go.y:48 { + yyVAL.blocks_any = []BlockAny{yyDollar[1].block} } case 4: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.go.y:32 + //line parser/parser.go.y:49 { + yyVAL.blocks_any = []BlockAny{yyDollar[1].block} } case 5: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.go.y:33 + //line parser/parser.go.y:50 { + yyVAL.blocks_any = []BlockAny{yyDollar[1].block} } case 6: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.go.y:34 + //line parser/parser.go.y:51 { + yyVAL.blocks_any = []BlockAny{yyDollar[1].block} } case 7: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.go.y:35 + //line parser/parser.go.y:52 { + yyVAL.blocks_any = []BlockAny{yyDollar[1].block} } case 8: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.go.y:36 + //line parser/parser.go.y:53 { + yyVAL.blocks_any = []BlockAny{yyDollar[1].block} } case 9: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.go.y:37 + //line parser/parser.go.y:54 { + yyVAL.blocks_any = []BlockAny{yyDollar[1].block} } case 10: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.go.y:38 + //line parser/parser.go.y:55 { + yyVAL.blocks_any = []BlockAny{yyDollar[1].block_args} } case 11: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.go.y:39 + //line parser/parser.go.y:56 { + yyVAL.blocks_any = []BlockAny{yyDollar[1].block} } case 12: + yyDollar = yyS[yypt-4 : yypt+1] + //line parser/parser.go.y:60 + { + yyVAL.block = Block{name: yyDollar[1].token.lit, stmts: yyDollar[3].stmts_any} + } + case 13: + yyDollar = yyS[yypt-2 : yypt+1] + //line parser/parser.go.y:64 + { + } + case 14: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.go.y:40 + //line parser/parser.go.y:64 { } - case 17: + case 16: yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.go.y:47 + //line parser/parser.go.y:67 + { + } + case 17: + yyDollar = yyS[yypt-2 : yypt+1] + //line parser/parser.go.y:68 { } case 18: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:48 + //line parser/parser.go.y:69 { } case 19: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:49 + //line parser/parser.go.y:70 { } case 20: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:50 + //line parser/parser.go.y:71 { } case 21: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:51 + //line parser/parser.go.y:72 { } case 22: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:52 + //line parser/parser.go.y:73 { } case 23: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:53 + //line parser/parser.go.y:74 { } case 24: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:54 + //line parser/parser.go.y:75 { } case 25: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:55 + //line parser/parser.go.y:76 { } case 26: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:56 + //line parser/parser.go.y:77 { } case 27: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:57 + //line parser/parser.go.y:78 { } case 28: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:58 + //line parser/parser.go.y:79 { } case 29: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:59 + //line parser/parser.go.y:80 { } case 30: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:60 + //line parser/parser.go.y:81 { } case 31: + yyDollar = yyS[yypt-4 : yypt+1] + //line parser/parser.go.y:85 + { + yyVAL.block = Block{name: yyDollar[1].token.lit, stmts: yyDollar[3].stmts_any} + } + case 32: + yyDollar = yyS[yypt-4 : yypt+1] + //line parser/parser.go.y:91 + { + yyVAL.block = Block{name: yyDollar[1].token.lit, stmts: yyDollar[3].stmts_any} + } + case 33: + yyDollar = yyS[yypt-4 : yypt+1] + //line parser/parser.go.y:97 + { + yyVAL.block = Block{name: yyDollar[1].token.lit, stmts: yyDollar[3].stmts_any} + } + case 34: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:61 + //line parser/parser.go.y:102 { } - case 40: + case 35: + yyDollar = yyS[yypt-1 : yypt+1] + //line parser/parser.go.y:102 + { + } + case 36: + yyDollar = yyS[yypt-5 : yypt+1] + //line parser/parser.go.y:106 + { + yyVAL.block = Block{name: yyDollar[1].token.lit, stmts: yyDollar[4].stmts_any} + } + case 37: + yyDollar = yyS[yypt-2 : yypt+1] + //line parser/parser.go.y:112 + { + yyVAL.stmts_any = append([]StmtAny{yyDollar[1].stmt_any}, yyDollar[2].stmts_any...) + } + case 38: + yyDollar = yyS[yypt-1 : yypt+1] + //line parser/parser.go.y:115 + { + yyVAL.stmts_any = []StmtAny{yyDollar[1].stmt_any} + } + case 39: yyDollar = yyS[yypt-0 : yypt+1] - //line parser/parser.go.y:75 + //line parser/parser.go.y:117 { } - case 41: + case 40: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.go.y:76 + //line parser/parser.go.y:118 { } - case 42: + case 41: yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.go.y:77 + //line parser/parser.go.y:119 + { + } + case 42: + yyDollar = yyS[yypt-2 : yypt+1] + //line parser/parser.go.y:120 { } case 43: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:78 + //line parser/parser.go.y:121 { } case 44: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:79 + //line parser/parser.go.y:122 { } case 45: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:80 + //line parser/parser.go.y:123 { } - case 46: + case 47: + yyDollar = yyS[yypt-1 : yypt+1] + //line parser/parser.go.y:125 + { + } + case 49: + yyDollar = yyS[yypt-5 : yypt+1] + //line parser/parser.go.y:131 + { + yyVAL.block = Block{name: yyDollar[1].token.lit, stmts: yyDollar[4].stmts_any} + } + case 50: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:81 + //line parser/parser.go.y:137 { + yyVAL.stmts_any = append([]StmtAny{yyDollar[1].stmt_any}, yyDollar[2].stmts_any...) } - case 48: + case 51: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.go.y:83 + //line parser/parser.go.y:140 { + yyVAL.stmts_any = []StmtAny{yyDollar[1].stmt_any} } - case 53: + case 52: yyDollar = yyS[yypt-0 : yypt+1] - //line parser/parser.go.y:91 + //line parser/parser.go.y:142 { } - case 54: + case 53: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.go.y:92 + //line parser/parser.go.y:143 { } - case 55: + case 54: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:93 + //line parser/parser.go.y:144 + { + } + case 55: + yyDollar = yyS[yypt-1 : yypt+1] + //line parser/parser.go.y:145 { } case 56: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.go.y:94 + //line parser/parser.go.y:146 { } case 57: - yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.go.y:95 + yyDollar = yyS[yypt-2 : yypt+1] + //line parser/parser.go.y:147 { } case 58: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:96 + //line parser/parser.go.y:148 { } case 59: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:97 + //line parser/parser.go.y:149 { } case 60: - yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:98 + yyDollar = yyS[yypt-4 : yypt+1] + //line parser/parser.go.y:150 { } case 61: - yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.go.y:99 + yyDollar = yyS[yypt-2 : yypt+1] + //line parser/parser.go.y:151 { } case 62: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:100 + //line parser/parser.go.y:152 { } case 63: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:101 + //line parser/parser.go.y:153 { } case 64: + yyDollar = yyS[yypt-1 : yypt+1] + //line parser/parser.go.y:154 + { + } + case 65: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:102 + //line parser/parser.go.y:155 { } case 66: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:104 + //line parser/parser.go.y:156 { } case 67: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:105 + //line parser/parser.go.y:157 { } case 68: + yyDollar = yyS[yypt-4 : yypt+1] + //line parser/parser.go.y:159 + { + yyVAL.stmt_any = StmtMulti{yyDollar[1].token.lit, yyDollar[3].values} + } + case 69: + yyDollar = yyS[yypt-4 : yypt+1] + //line parser/parser.go.y:163 + { + yyVAL.stmt_any = StmtMulti{yyDollar[1].token.lit, yyDollar[3].values} + } + case 70: + yyDollar = yyS[yypt-4 : yypt+1] + //line parser/parser.go.y:166 + { + } + case 71: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:106 + //line parser/parser.go.y:167 { } case 72: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:110 + //line parser/parser.go.y:168 { } case 73: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:111 + //line parser/parser.go.y:169 { } case 74: - yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:112 + yyDollar = yyS[yypt-1 : yypt+1] + //line parser/parser.go.y:170 { } case 75: - yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.go.y:113 + yyDollar = yyS[yypt-4 : yypt+1] + //line parser/parser.go.y:171 { } case 76: - yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.go.y:114 + yyDollar = yyS[yypt-2 : yypt+1] + //line parser/parser.go.y:172 { } case 77: - yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:115 + yyDollar = yyS[yypt-4 : yypt+1] + //line parser/parser.go.y:173 { } case 78: yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.go.y:116 + //line parser/parser.go.y:174 { } case 79: - yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.go.y:117 + yyDollar = yyS[yypt-1 : yypt+1] + //line parser/parser.go.y:175 { } case 80: - yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.go.y:118 + yyDollar = yyS[yypt-2 : yypt+1] + //line parser/parser.go.y:176 { } case 81: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:119 + //line parser/parser.go.y:177 { } case 82: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:120 + //line parser/parser.go.y:178 { } case 83: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:121 + //line parser/parser.go.y:179 { } case 84: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:122 + //line parser/parser.go.y:180 { } - case 85: - yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:123 + case 87: + yyDollar = yyS[yypt-0 : yypt+1] + //line parser/parser.go.y:184 { } case 88: - yyDollar = yyS[yypt-0 : yypt+1] - //line parser/parser.go.y:127 + yyDollar = yyS[yypt-2 : yypt+1] + //line parser/parser.go.y:185 { } case 89: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:128 + //line parser/parser.go.y:186 { } case 90: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:129 + //line parser/parser.go.y:187 { } - case 91: + case 94: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:130 + //line parser/parser.go.y:192 { } - case 95: - yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:135 + case 99: + yyDollar = yyS[yypt-0 : yypt+1] + //line parser/parser.go.y:198 { } case 100: - yyDollar = yyS[yypt-0 : yypt+1] - //line parser/parser.go.y:141 + yyDollar = yyS[yypt-1 : yypt+1] + //line parser/parser.go.y:199 { } case 101: - yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.go.y:142 + yyDollar = yyS[yypt-3 : yypt+1] + //line parser/parser.go.y:200 { } case 102: - yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.go.y:143 + yyDollar = yyS[yypt-5 : yypt+1] + //line parser/parser.go.y:204 { + yyVAL.block = Block{name: yyDollar[1].token.lit, stmts: yyDollar[4].stmts_any} } - case 106: + case 103: + yyDollar = yyS[yypt-2 : yypt+1] + //line parser/parser.go.y:210 + { + yyVAL.stmts_any = append([]StmtAny{yyDollar[1].stmt_any}, yyDollar[2].stmts_any...) + } + case 104: + yyDollar = yyS[yypt-1 : yypt+1] + //line parser/parser.go.y:213 + { + yyVAL.stmts_any = []StmtAny{yyDollar[1].stmt_any} + } + case 105: yyDollar = yyS[yypt-0 : yypt+1] - //line parser/parser.go.y:149 + //line parser/parser.go.y:215 + { + } + case 106: + yyDollar = yyS[yypt-2 : yypt+1] + //line parser/parser.go.y:216 { } case 107: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:150 + //line parser/parser.go.y:217 { } case 108: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:151 + //line parser/parser.go.y:218 { } case 109: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:152 + //line parser/parser.go.y:219 { } case 110: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:153 + //line parser/parser.go.y:220 { } case 111: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:154 + //line parser/parser.go.y:221 { } - case 112: + case 114: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:155 + //line parser/parser.go.y:227 { + yyVAL.stmt_any = append([]StmtAny{yyDollar[1].stmt_any}, yyDollar[2].stmts_any...) } - case 120: - yyDollar = yyS[yypt-0 : yypt+1] - //line parser/parser.go.y:165 + case 115: + yyDollar = yyS[yypt-1 : yypt+1] + //line parser/parser.go.y:230 { + yyVAL.stmt_any = []StmtAny{yyDollar[1].stmt_any} } - case 121: - yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:166 + case 116: + yyDollar = yyS[yypt-5 : yypt+1] + //line parser/parser.go.y:234 { + yyVAL.block = Block{name: yyDollar[1].token.lit, stmts: yyDollar[4].stmts_any} } - case 122: + case 117: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:167 + //line parser/parser.go.y:240 { + yyVAL.stmts_any = append([]StmtAny{yyDollar[1].stmt_any}, yyDollar[2].stmts_any...) } - case 123: - yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:168 + case 118: + yyDollar = yyS[yypt-1 : yypt+1] + //line parser/parser.go.y:243 { + yyVAL.stmts_any = []StmtAny{yyDollar[1].stmt_any} } - case 129: - yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:176 + case 119: + yyDollar = yyS[yypt-0 : yypt+1] + //line parser/parser.go.y:245 { } - case 130: + case 120: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:177 + //line parser/parser.go.y:246 { } - case 131: - yyDollar = yyS[yypt-0 : yypt+1] - //line parser/parser.go.y:179 + case 121: + yyDollar = yyS[yypt-2 : yypt+1] + //line parser/parser.go.y:247 { } - case 132: + case 122: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:180 + //line parser/parser.go.y:248 { } - case 133: - yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:181 + case 123: + yyDollar = yyS[yypt-5 : yypt+1] + //line parser/parser.go.y:252 { + yyVAL.block_args = BlockArgs{Name: yyDollar[1].token.lit, Args: yyDollar[2].strings, Stmts: yyDollar[4].stmts_any} } - case 134: + case 124: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:182 + //line parser/parser.go.y:258 { + yyVAL.stmts_any = append([]StmtAny{yyDollar[1].stmt_any}, yyDollar[2].stmts_any...) } - case 135: - yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:183 + case 125: + yyDollar = yyS[yypt-1 : yypt+1] + //line parser/parser.go.y:261 { + yyVAL.stmts_any = []StmtAny{yyDollar[1].stmt_any} } - case 136: + case 126: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:184 + //line parser/parser.go.y:264 { + yyVAL.strings = []string{yyDollar[1].string, yyDollar[2].token.lit} } - case 137: + case 127: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:185 + //line parser/parser.go.y:265 + { + yyVAL.strings = []string{yyDollar[1].token.lit, yyDollar[2].token.lit} + } + case 128: + yyDollar = yyS[yypt-2 : yypt+1] + //line parser/parser.go.y:266 + { + yyVAL.strings = []string{yyDollar[1].token.lit, yyDollar[2].token.lit} + } + case 129: + yyDollar = yyS[yypt-2 : yypt+1] + //line parser/parser.go.y:269 + { + yyVAL.stmt_any = Stmt{yyDollar[1].token.lit, yyDollar[2].token.lit} + } + case 130: + yyDollar = yyS[yypt-2 : yypt+1] + //line parser/parser.go.y:270 + { + yyVAL.stmt_any = Stmt{yyDollar[1].token.lit, yyDollar[2].string} + } + case 131: + yyDollar = yyS[yypt-2 : yypt+1] + //line parser/parser.go.y:271 + { + yyVAL.stmt_any = Stmt{yyDollar[1].token.lit, yyDollar[2].string} + } + case 132: + yyDollar = yyS[yypt-2 : yypt+1] + //line parser/parser.go.y:272 + { + yyVAL.stmt_any = Stmt{yyDollar[1].token.lit, yyDollar[2].string} + } + case 133: + yyDollar = yyS[yypt-2 : yypt+1] + //line parser/parser.go.y:273 + { + yyVAL.stmt_any = Stmt{yyDollar[1].token.lit, yyDollar[2].string} + } + case 134: + yyDollar = yyS[yypt-2 : yypt+1] + //line parser/parser.go.y:274 + { + yyVAL.stmt_any = Stmt{yyDollar[1].token.lit, yyDollar[2].token.lit} + } + case 135: + yyDollar = yyS[yypt-2 : yypt+1] + //line parser/parser.go.y:275 { + yyVAL.stmt_any = Stmt{yyDollar[1].token.lit, yyDollar[2].string} + } + case 136: + yyDollar = yyS[yypt-3 : yypt+1] + //line parser/parser.go.y:276 + { + yyVAL.stmt_any = StmtMulti{yyDollar[1].token.lit, []Value{yyDollar[2].string, yyDollar[3].token.lit}} + } + case 137: + yyDollar = yyS[yypt-6 : yypt+1] + //line parser/parser.go.y:278 + { + yyVAL.stmt_any = SubBlockArgs{Name: yyDollar[1].token.lit, Args: []string{yyDollar[2].string, yyDollar[3].token.lit}, Stmts: yyDollar[5].stmts_any} } case 138: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:186 + //line parser/parser.go.y:281 { + yyVAL.stmt_any = Stmt{yyDollar[1].token.lit, yyDollar[2].token.lit} } case 139: - yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.go.y:187 + yyDollar = yyS[yypt-1 : yypt+1] + //line parser/parser.go.y:282 + { + yyVAL.stmt_any = yyDollar[1].token.lit + } + case 140: + yyDollar = yyS[yypt-1 : yypt+1] + //line parser/parser.go.y:283 { + yyVAL.stmt_any = yyDollar[1].token.lit + } + case 141: + yyDollar = yyS[yypt-2 : yypt+1] + //line parser/parser.go.y:284 + { + yyVAL.stmt_any = Stmt{yyDollar[1].token.lit, yyDollar[2].token.lit} } case 142: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:190 + //line parser/parser.go.y:285 + { + yyVAL.stmt_any = Stmt{yyDollar[1].token.lit, yyDollar[2].token.lit} + } + case 143: + yyDollar = yyS[yypt-2 : yypt+1] + //line parser/parser.go.y:286 + { + yyVAL.stmt_any = Stmt{yyDollar[1].token.lit, yyDollar[2].token.lit} + } + case 144: + yyDollar = yyS[yypt-2 : yypt+1] + //line parser/parser.go.y:287 { + yyVAL.stmt_any = Stmt{yyDollar[1].token.lit, yyDollar[2].token.lit} } case 145: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:193 + //line parser/parser.go.y:291 { + yyVAL.stmts_any = append([]StmtAny{yyDollar[1].stmt_any}, yyDollar[2].stmts_any...) } case 146: - yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:194 + yyDollar = yyS[yypt-1 : yypt+1] + //line parser/parser.go.y:294 { + yyVAL.stmts_any = []StmtAny{yyDollar[1].stmt_any} } case 147: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:195 + //line parser/parser.go.y:297 { + yyVAL.stmt_any = Stmt{yyDollar[1].token.lit, yyDollar[2].token.lit} } case 148: - yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:196 + yyDollar = yyS[yypt-1 : yypt+1] + //line parser/parser.go.y:298 + { + yyVAL.stmt_any = yyDollar[1].token.lit + } + case 149: + yyDollar = yyS[yypt-4 : yypt+1] + //line parser/parser.go.y:299 { + yyVAL.stmt_any = Block{name: yyDollar[1].token.lit, stmts: yyDollar[3].stmts_any} } case 150: - yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.go.y:198 + yyDollar = yyS[yypt-4 : yypt+1] + //line parser/parser.go.y:300 { + yyVAL.stmt_any = Block{name: yyDollar[1].token.lit, stmts: yyDollar[3].stmts_any} } case 151: - yyDollar = yyS[yypt-0 : yypt+1] - //line parser/parser.go.y:200 + yyDollar = yyS[yypt-4 : yypt+1] + //line parser/parser.go.y:301 { + yyVAL.stmt_any = Block{name: yyDollar[1].token.lit, stmts: yyDollar[3].stmts_any} } case 152: - yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:201 + yyDollar = yyS[yypt-4 : yypt+1] + //line parser/parser.go.y:302 { + yyVAL.stmt_any = Block{name: yyDollar[1].token.lit, stmts: yyDollar[3].stmts_any} } case 153: - yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.go.y:202 + yyDollar = yyS[yypt-4 : yypt+1] + //line parser/parser.go.y:303 { + yyVAL.stmt_any = Block{name: yyDollar[1].token.lit, stmts: yyDollar[3].stmts_any} } case 154: yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.go.y:203 + //line parser/parser.go.y:304 { + yyVAL.stmt_any = Block{name: yyDollar[1].token.lit, stmts: yyDollar[3].stmts_any} } case 155: - yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.go.y:204 + yyDollar = yyS[yypt-2 : yypt+1] + //line parser/parser.go.y:308 { + yyVAL.stmts_any = append([]StmtAny{yyDollar[1].stmt_any}, yyDollar[2].stmts_any...) } case 156: - yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.go.y:205 + yyDollar = yyS[yypt-1 : yypt+1] + //line parser/parser.go.y:311 { + yyVAL.stmts_any = []StmtAny{yyDollar[1].stmt_any} } case 157: - yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.go.y:206 + yyDollar = yyS[yypt-2 : yypt+1] + //line parser/parser.go.y:314 { + yyVAL.stmt_any = Stmt{yyDollar[1].token.lit, yyDollar[2].token.lit} } case 158: - yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.go.y:207 + yyDollar = yyS[yypt-2 : yypt+1] + //line parser/parser.go.y:315 { + yyVAL.stmt_any = Stmt{yyDollar[1].token.lit, yyDollar[2].token.lit} } case 159: - yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.go.y:208 + yyDollar = yyS[yypt-2 : yypt+1] + //line parser/parser.go.y:316 + { + yyVAL.stmt_any = Stmt{yyDollar[1].token.lit, yyDollar[2].token.lit} + } + case 160: + yyDollar = yyS[yypt-2 : yypt+1] + //line parser/parser.go.y:317 { + yyVAL.stmt_any = Stmt{yyDollar[1].token.lit, yyDollar[2].token.lit} } case 161: - yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.go.y:210 + yyDollar = yyS[yypt-2 : yypt+1] + //line parser/parser.go.y:318 { + yyVAL.stmt_any = Stmt{yyDollar[1].token.lit, yyDollar[2].token.lit} } case 162: - yyDollar = yyS[yypt-0 : yypt+1] - //line parser/parser.go.y:212 + yyDollar = yyS[yypt-2 : yypt+1] + //line parser/parser.go.y:321 { + yyVAL.stmts_any = append([]StmtAny{yyDollar[1].stmt_any}, yyDollar[2].stmts_any...) } case 163: - yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:213 + yyDollar = yyS[yypt-1 : yypt+1] + //line parser/parser.go.y:324 { + yyVAL.stmts_any = []StmtAny{yyDollar[1].stmt_any} } case 164: - yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:214 + yyDollar = yyS[yypt-4 : yypt+1] + //line parser/parser.go.y:327 { } case 165: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:215 + //line parser/parser.go.y:328 { } case 166: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:216 + //line parser/parser.go.y:329 { } case 167: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:217 + //line parser/parser.go.y:330 { } - case 169: - yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.go.y:219 + case 168: + yyDollar = yyS[yypt-2 : yypt+1] + //line parser/parser.go.y:331 { } - case 170: - yyDollar = yyS[yypt-0 : yypt+1] - //line parser/parser.go.y:221 + case 169: + yyDollar = yyS[yypt-2 : yypt+1] + //line parser/parser.go.y:332 { } case 171: - yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.go.y:222 + yyDollar = yyS[yypt-1 : yypt+1] + //line parser/parser.go.y:334 { } case 172: - yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:223 + yyDollar = yyS[yypt-0 : yypt+1] + //line parser/parser.go.y:336 { } case 173: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:224 + //line parser/parser.go.y:337 { } case 174: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:225 + //line parser/parser.go.y:338 { } case 175: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:226 + //line parser/parser.go.y:339 { } case 176: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:227 + //line parser/parser.go.y:340 + { + } + case 177: + yyDollar = yyS[yypt-2 : yypt+1] + //line parser/parser.go.y:342 { } case 178: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.go.y:229 + //line parser/parser.go.y:342 { } case 179: yyDollar = yyS[yypt-0 : yypt+1] - //line parser/parser.go.y:231 + //line parser/parser.go.y:344 { } case 180: - yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:232 + yyDollar = yyS[yypt-1 : yypt+1] + //line parser/parser.go.y:345 { } case 181: - yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:233 + yyDollar = yyS[yypt-4 : yypt+1] + //line parser/parser.go.y:346 { } case 182: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:234 + //line parser/parser.go.y:347 { } case 183: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:235 + //line parser/parser.go.y:348 + { + } + case 184: + yyDollar = yyS[yypt-2 : yypt+1] + //line parser/parser.go.y:349 { } case 185: + yyDollar = yyS[yypt-2 : yypt+1] + //line parser/parser.go.y:350 + { + } + case 187: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.go.y:237 + //line parser/parser.go.y:352 { } - case 186: + case 188: yyDollar = yyS[yypt-0 : yypt+1] - //line parser/parser.go.y:239 + //line parser/parser.go.y:354 { } - case 187: - yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.go.y:240 + case 189: + yyDollar = yyS[yypt-2 : yypt+1] + //line parser/parser.go.y:355 + { + } + case 190: + yyDollar = yyS[yypt-2 : yypt+1] + //line parser/parser.go.y:356 + { + } + case 191: + yyDollar = yyS[yypt-2 : yypt+1] + //line parser/parser.go.y:357 + { + } + case 192: + yyDollar = yyS[yypt-2 : yypt+1] + //line parser/parser.go.y:358 + { + } + case 193: + yyDollar = yyS[yypt-2 : yypt+1] + //line parser/parser.go.y:359 { } case 194: - yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.go.y:247 + yyDollar = yyS[yypt-2 : yypt+1] + //line parser/parser.go.y:360 { } case 195: - yyDollar = yyS[yypt-0 : yypt+1] - //line parser/parser.go.y:249 + yyDollar = yyS[yypt-2 : yypt+1] + //line parser/parser.go.y:362 { } case 196: - yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:250 + yyDollar = yyS[yypt-1 : yypt+1] + //line parser/parser.go.y:362 { } case 197: - yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:251 + yyDollar = yyS[yypt-0 : yypt+1] + //line parser/parser.go.y:364 { } case 198: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:252 + //line parser/parser.go.y:365 { } case 199: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:253 + //line parser/parser.go.y:366 { } case 200: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:254 + //line parser/parser.go.y:367 { } case 201: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:255 + //line parser/parser.go.y:368 + { + } + case 202: + yyDollar = yyS[yypt-2 : yypt+1] + //line parser/parser.go.y:369 { } case 203: - yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.go.y:257 + yyDollar = yyS[yypt-2 : yypt+1] + //line parser/parser.go.y:370 { } case 204: - yyDollar = yyS[yypt-0 : yypt+1] - //line parser/parser.go.y:259 + yyDollar = yyS[yypt-2 : yypt+1] + //line parser/parser.go.y:371 { } case 205: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:260 + //line parser/parser.go.y:372 { } case 206: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:261 + //line parser/parser.go.y:373 { } case 207: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:262 + //line parser/parser.go.y:375 { } case 208: - yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:263 + yyDollar = yyS[yypt-1 : yypt+1] + //line parser/parser.go.y:375 { } case 209: - yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:264 + yyDollar = yyS[yypt-0 : yypt+1] + //line parser/parser.go.y:377 { } case 210: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:265 + //line parser/parser.go.y:378 { } case 211: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:266 + //line parser/parser.go.y:379 { } case 212: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:267 + //line parser/parser.go.y:380 { } case 213: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:268 + //line parser/parser.go.y:381 + { + } + case 214: + yyDollar = yyS[yypt-1 : yypt+1] + //line parser/parser.go.y:382 { } case 215: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.go.y:270 + //line parser/parser.go.y:385 { + yyVAL.string = yyDollar[1].token.lit } case 216: - yyDollar = yyS[yypt-0 : yypt+1] - //line parser/parser.go.y:272 + yyDollar = yyS[yypt-1 : yypt+1] + //line parser/parser.go.y:386 { + yyVAL.string = yyDollar[1].token.lit } case 217: - yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:273 + yyDollar = yyS[yypt-1 : yypt+1] + //line parser/parser.go.y:387 { + yyVAL.string = yyDollar[1].token.lit } case 218: - yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:274 + yyDollar = yyS[yypt-1 : yypt+1] + //line parser/parser.go.y:388 { + yyVAL.string = yyDollar[1].token.lit } case 219: - yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:275 + yyDollar = yyS[yypt-1 : yypt+1] + //line parser/parser.go.y:389 { + yyVAL.string = yyDollar[1].token.lit } case 220: - yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:276 + yyDollar = yyS[yypt-1 : yypt+1] + //line parser/parser.go.y:390 { + yyVAL.string = yyDollar[1].token.lit } case 221: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.go.y:277 + //line parser/parser.go.y:391 { + yyVAL.string = yyDollar[1].token.lit } case 222: - yyDollar = yyS[yypt-0 : yypt+1] - //line parser/parser.go.y:279 + yyDollar = yyS[yypt-1 : yypt+1] + //line parser/parser.go.y:392 { + yyVAL.string = yyDollar[1].token.lit } case 223: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.go.y:280 + //line parser/parser.go.y:393 { + yyVAL.string = yyDollar[1].token.lit } case 224: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.go.y:281 + //line parser/parser.go.y:394 { + yyVAL.string = yyDollar[1].token.lit } case 225: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.go.y:282 + //line parser/parser.go.y:395 { + yyVAL.string = yyDollar[1].token.lit } case 226: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.go.y:283 + //line parser/parser.go.y:396 { + yyVAL.string = yyDollar[1].token.lit } case 227: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.go.y:284 + //line parser/parser.go.y:399 { + yyVAL.string = yyDollar[1].token.lit } case 228: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.go.y:285 + //line parser/parser.go.y:400 { + yyVAL.string = yyDollar[1].token.lit } case 229: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.go.y:286 + //line parser/parser.go.y:401 { + yyVAL.string = yyDollar[1].token.lit } case 230: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.go.y:287 + //line parser/parser.go.y:404 { + yyVAL.string = yyDollar[1].token.lit } case 231: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.go.y:288 + //line parser/parser.go.y:405 { + yyVAL.string = yyDollar[1].token.lit } case 232: - yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.go.y:289 + yyDollar = yyS[yypt-2 : yypt+1] + //line parser/parser.go.y:409 { + yyVAL.values = append([]Value{yyDollar[1].vip_addr}, yyDollar[2].values...) } case 233: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.go.y:290 + //line parser/parser.go.y:412 { + yyVAL.values = []Value{yyDollar[1].vip_addr} } case 234: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.go.y:291 + //line parser/parser.go.y:415 { + yyVAL.vip_addr = VIPAddr{Addr: yyDollar[1].string} } case 235: - yyDollar = yyS[yypt-0 : yypt+1] - //line parser/parser.go.y:293 + yyDollar = yyS[yypt-2 : yypt+1] + //line parser/parser.go.y:416 { } case 236: - yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.go.y:294 + yyDollar = yyS[yypt-2 : yypt+1] + //line parser/parser.go.y:417 { } case 237: - yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.go.y:295 - { - } - case 238: - yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.go.y:296 + yyDollar = yyS[yypt-2 : yypt+1] + //line parser/parser.go.y:418 { } case 239: - yyDollar = yyS[yypt-0 : yypt+1] - //line parser/parser.go.y:298 + yyDollar = yyS[yypt-1 : yypt+1] + //line parser/parser.go.y:420 { } case 240: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.go.y:299 + //line parser/parser.go.y:422 { } case 241: + yyDollar = yyS[yypt-2 : yypt+1] + //line parser/parser.go.y:424 + { + } + case 242: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.go.y:300 + //line parser/parser.go.y:424 { } case 243: + yyDollar = yyS[yypt-0 : yypt+1] + //line parser/parser.go.y:426 + { + } + case 249: + yyDollar = yyS[yypt-2 : yypt+1] + //line parser/parser.go.y:433 + { + } + case 250: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.go.y:302 + //line parser/parser.go.y:433 + { + } + case 251: + yyDollar = yyS[yypt-0 : yypt+1] + //line parser/parser.go.y:435 + { + } + case 252: + yyDollar = yyS[yypt-2 : yypt+1] + //line parser/parser.go.y:436 { } - case 245: + case 253: + yyDollar = yyS[yypt-2 : yypt+1] + //line parser/parser.go.y:437 + { + } + case 254: + yyDollar = yyS[yypt-2 : yypt+1] + //line parser/parser.go.y:438 + { + } + case 255: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.go.y:304 + //line parser/parser.go.y:439 { } - case 246: + case 256: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.go.y:306 + //line parser/parser.go.y:440 { } - case 247: + case 257: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:307 + //line parser/parser.go.y:441 { } - case 248: + case 258: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:308 + //line parser/parser.go.y:442 { } - case 249: + case 259: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:309 + //line parser/parser.go.y:443 { } - case 250: - yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.go.y:311 + case 260: + yyDollar = yyS[yypt-2 : yypt+1] + //line parser/parser.go.y:444 { } - case 251: + case 261: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:312 + //line parser/parser.go.y:445 { } - case 252: + case 262: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.go.y:313 + //line parser/parser.go.y:446 { } - case 254: - yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.go.y:315 + case 263: + yyDollar = yyS[yypt-2 : yypt+1] + //line parser/parser.go.y:447 { } - case 255: - yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.go.y:317 + case 264: + yyDollar = yyS[yypt-2 : yypt+1] + //line parser/parser.go.y:448 { } - case 258: - yyDollar = yyS[yypt-0 : yypt+1] - //line parser/parser.go.y:321 + case 265: + yyDollar = yyS[yypt-2 : yypt+1] + //line parser/parser.go.y:449 { } case 266: - yyDollar = yyS[yypt-0 : yypt+1] - //line parser/parser.go.y:330 + yyDollar = yyS[yypt-2 : yypt+1] + //line parser/parser.go.y:450 { } - case 283: - yyDollar = yyS[yypt-0 : yypt+1] - //line parser/parser.go.y:348 + case 267: + yyDollar = yyS[yypt-2 : yypt+1] + //line parser/parser.go.y:451 { } - case 288: - yyDollar = yyS[yypt-0 : yypt+1] - //line parser/parser.go.y:354 + case 268: + yyDollar = yyS[yypt-4 : yypt+1] + //line parser/parser.go.y:454 { } - case 294: - yyDollar = yyS[yypt-0 : yypt+1] - //line parser/parser.go.y:361 + case 269: + yyDollar = yyS[yypt-4 : yypt+1] + //line parser/parser.go.y:455 { } - case 297: + case 270: + yyDollar = yyS[yypt-4 : yypt+1] + //line parser/parser.go.y:456 + { + } + case 271: + yyDollar = yyS[yypt-4 : yypt+1] + //line parser/parser.go.y:457 + { + } + case 272: yyDollar = yyS[yypt-0 : yypt+1] - //line parser/parser.go.y:365 + //line parser/parser.go.y:459 + { + } + case 278: + yyDollar = yyS[yypt-1 : yypt+1] + //line parser/parser.go.y:467 + { + yyVAL.string = yyDollar[1].string + } + case 279: + yyDollar = yyS[yypt-1 : yypt+1] + //line parser/parser.go.y:468 + { + yyVAL.string = yyDollar[1].token.lit + } + case 280: + yyDollar = yyS[yypt-1 : yypt+1] + //line parser/parser.go.y:471 { + yyVAL.string = yyDollar[1].token.lit } - case 300: + case 281: + yyDollar = yyS[yypt-1 : yypt+1] + //line parser/parser.go.y:472 + { + yyVAL.string = yyDollar[1].token.lit + } + case 282: yyDollar = yyS[yypt-0 : yypt+1] - //line parser/parser.go.y:369 + //line parser/parser.go.y:474 { } - case 303: + case 285: yyDollar = yyS[yypt-0 : yypt+1] - //line parser/parser.go.y:373 + //line parser/parser.go.y:478 { } } diff --git a/parser/parser.go.y b/parser/parser.go.y index e9b6f75..b38f354 100644 --- a/parser/parser.go.y +++ b/parser/parser.go.y @@ -3,45 +3,65 @@ package parser %} %union { - integer int - symbol string + string string + strings []string + token Token + block Block + blocks_any []BlockAny + block_args BlockArgs + subblock_args SubBlockArgs + stmt_any StmtAny + stmts_any []StmtAny + stmt Stmt + stmt_multi StmtMulti + stmt_value StmtValue + values []Value + vip_addr VIPAddr }; -%token NUMBER -%token ID STRING EMAIL IPV4 IPV6 IP_CIDR IPADDR_RANGE HEX32 PATHSTR -%token LB RB -%token GLOBALDEFS -%token NOTIFICATION_EMAIL NOTIFICATION_EMAIL_FROM SMTP_SERVER SMTP_CONNECT_TIMEOUT ROUTER_ID LVS_ID VRRP_MCAST_GROUP4 VRRP_MCAST_GROUP6 VRRP_GARP_MASTER_DELAY VRRP_GARP_MASTER_REPEAT VRRP_GARP_MASTER_REFRESH VRRP_GARP_MASTER_REFRESH_REPEAT VRRP_VERSION -%token STATIC_IPADDRESS -%token STATIC_ROUTES -%token STATIC_RULES -%token VRRP_SYNC_GROUP GROUP -%token VRRP_INSTANCE -%token USE_VMAC VERSION VMAC_XMIT_BASE NATIVE_IPV6 INTERFACE MCAST_SRC_IP UNICAST_SRC_IP UNICAST_PEER LVS_SYNC_DAEMON_INTERFACE VIRTUAL_ROUTER_ID NOPREEMPT PREEMPT_DELAY PRIORITY ADVERT_INT VIRTUAL_IPADDRESS VIRTUAL_IPADDRESS_EXCLUDED VIRTUAL_ROUTES STATE MASTER BACKUP GARP_MASTER_DELAY SMTP_ALERT AUTHENTICATION AUTH_TYPE AUTH_PASS PASS AH LABEL DEV SCOPE SITE LINK HOST NOWHERE GLOBAL BRD SRC FROM TO VIA GW OR TABLE METRIC TRACK_INTERFACE TRACK_SCRIPT DONT_TRACK_PRIMARY NOTIFY_MASTER NOTIFY_BACKUP NOTIFY_FAULT NOTIFY_STOP NOTIFY BLACKHOLE -%token VRRP_SCRIPT -%token SCRIPT INTERVAL TIMEOUT WEIGHT FALL RISE -%token VIRTUAL_SERVER_GROUP -%token VIRTUAL_SERVER -%token DELAY_LOOP LB_ALGO LB_KIND LVS_SCHED LVS_METHOD RR WRR LC WLC FO OVF LBLC LBLCR SH DH SED NQ NAT DR TUN PERSISTENCE_TIMEOUT PROTOCOL TCP UDP SORRY_SERVER REAL_SERVER FWMARK INHIBIT_ON_FAILURE TCP_CHECK HTTP_GET SSL_GET SMTP_CHECK DNS_CHECK MISC_CHECK URL PATH DIGEST STATUS_CODE CONNECT_TIMEOUT CONNECT_PORT CONNECT_IP BINDTO BIND_PORT RETRY HELO_NAME TYPE NAME MISC_PATH MISC_TIMEOUT WARMUP MISC_DYNAMIC NB_GET_RETRY DELAY_BEFORE_RETRY VIRTUALHOST ALPHA OMEGA QUORUM HYSTERESIS QUORUM_UP QUORUM_DOWN, +%token NUMBER ID STRING EMAIL IPV4 IPV6 IP_CIDR IPADDR_RANGE HEX32 PATHSTR LB RB GLOBALDEFS NOTIFICATION_EMAIL NOTIFICATION_EMAIL_FROM SMTP_SERVER SMTP_CONNECT_TIMEOUT ROUTER_ID LVS_ID VRRP_MCAST_GROUP4 VRRP_MCAST_GROUP6 VRRP_GARP_MASTER_DELAY VRRP_GARP_MASTER_REPEAT VRRP_GARP_MASTER_REFRESH VRRP_GARP_MASTER_REFRESH_REPEAT VRRP_VERSION STATIC_IPADDRESS STATIC_ROUTES STATIC_RULES VRRP_SYNC_GROUP GROUP VRRP_INSTANCE USE_VMAC VERSION VMAC_XMIT_BASE NATIVE_IPV6 INTERFACE MCAST_SRC_IP UNICAST_SRC_IP UNICAST_PEER LVS_SYNC_DAEMON_INTERFACE VIRTUAL_ROUTER_ID NOPREEMPT PREEMPT_DELAY PRIORITY ADVERT_INT VIRTUAL_IPADDRESS VIRTUAL_IPADDRESS_EXCLUDED VIRTUAL_ROUTES STATE MASTER BACKUP GARP_MASTER_DELAY SMTP_ALERT AUTHENTICATION AUTH_TYPE AUTH_PASS PASS AH LABEL DEV SCOPE SITE LINK HOST NOWHERE GLOBAL BRD SRC FROM TO VIA GW OR TABLE METRIC TRACK_INTERFACE TRACK_SCRIPT DONT_TRACK_PRIMARY NOTIFY_MASTER NOTIFY_BACKUP NOTIFY_FAULT NOTIFY_STOP NOTIFY BLACKHOLE VRRP_SCRIPT SCRIPT INTERVAL TIMEOUT WEIGHT FALL RISE VIRTUAL_SERVER_GROUP VIRTUAL_SERVER DELAY_LOOP LB_ALGO LB_KIND LVS_SCHED LVS_METHOD RR WRR LC WLC FO OVF LBLC LBLCR SH DH SED NQ NAT DR TUN PERSISTENCE_TIMEOUT PROTOCOL TCP UDP SORRY_SERVER REAL_SERVER FWMARK INHIBIT_ON_FAILURE TCP_CHECK HTTP_GET SSL_GET SMTP_CHECK DNS_CHECK MISC_CHECK URL PATH DIGEST STATUS_CODE CONNECT_TIMEOUT CONNECT_PORT CONNECT_IP BINDTO BIND_PORT RETRY HELO_NAME TYPE NAME MISC_PATH MISC_TIMEOUT WARMUP MISC_DYNAMIC NB_GET_RETRY DELAY_BEFORE_RETRY VIRTUALHOST ALPHA OMEGA QUORUM HYSTERESIS QUORUM_UP QUORUM_DOWN +%type configuration main_blocks +%type global vrrp_instance_block static_ipaddress_block static_routes_block static_rules_block vrrp_sync_group_block vrrp_instance_block vrrp_script_block virtual_server_group_block +%type virtual_server_block +%type global_statements vrrp_instance_statements vrrp_sync_group_statements vrrp_script_statements address_options route_options rule_options virtual_server_group_statements virtual_server_statements real_server_statements tcp_check_statements http_get_statements smtp_check_statements dns_check_statements misc_check_statements +%type vrrp_instance_statement vrrp_sync_group_statement vrrp_script_statement virtual_server_group_statement virtual_server_statement route_option rule_option real_server_statement tcp_check_statement http_get_statement smtp_check_statement dns_check_statement misc_check_statement +%type vips +%type vip +%type virtual_server_arg +%type ipaddr_literal ip46 lb_algo lb_kind protocol %% -configuration: main_statements configuration | main_statements { } -main_statements: { } -| global { } -| static_ipaddress_block { } -| static_routes_block { } -| static_rules_block { } -| vrrp_sync_group_block { } -| vrrp_instance_block { } -| vrrp_script_block { } -| virtual_server_block { } -| virtual_server_group_block { } - -global: GLOBALDEFS LB global_statements RB - -global_statements: global_statement global_statements | global_statement +configuration: main_blocks configuration + { + $$ = append($1, $2...) + yylex.(*Lexer).result = $$ + } + | main_blocks + { + $$ = $1 + yylex.(*Lexer).result = $$ + } + +main_blocks: + global { $$ = []BlockAny{$1} } + | static_ipaddress_block { $$ = []BlockAny{$1} } + | static_routes_block { $$ = []BlockAny{$1} } + | static_rules_block { $$ = []BlockAny{$1} } + | vrrp_sync_group_block { $$ = []BlockAny{$1} } + | vrrp_instance_block { $$ = []BlockAny{$1} } + | vrrp_script_block { $$ = []BlockAny{$1} } + | virtual_server_block { $$ = []BlockAny{$1} } + | virtual_server_group_block { $$ = []BlockAny{$1} } + +global: + GLOBALDEFS LB global_statements RB + { + $$ = Block{name: $1.lit, stmts: $3} + } + +global_statements: global_statement global_statements { } | global_statement { } global_statement: | NOTIFICATION_EMAIL LB mail_statements RB { } @@ -60,17 +80,39 @@ global_statement: | VRRP_MCAST_GROUP6 IPV6 { } | VRRP_VERSION NUMBER { } -static_ipaddress_block: STATIC_IPADDRESS LB address_options RB - -static_routes_block: STATIC_ROUTES LB route_options RB - -static_rules_block: STATIC_RULES LB rule_options RB - -rule_options: rule_option rule_options | rule_option - -vrrp_sync_group_block: VRRP_SYNC_GROUP STRING LB vrrp_sync_group_statements RB - -vrrp_sync_group_statements: vrrp_sync_group_statement vrrp_sync_group_statements | vrrp_sync_group_statement +static_ipaddress_block: + STATIC_IPADDRESS LB address_options RB + { + $$ = Block{name: $1.lit, stmts: $3} + } + +static_routes_block: + STATIC_ROUTES LB route_options RB + { + $$ = Block{name: $1.lit, stmts: $3} + } + +static_rules_block: + STATIC_RULES LB rule_options RB + { + $$ = Block{name: $1.lit, stmts: $3} + } + +rule_options: + rule_option rule_options { } | rule_option { } + +vrrp_sync_group_block: + VRRP_SYNC_GROUP STRING LB vrrp_sync_group_statements RB + { + $$ = Block{name: $1.lit, stmts: $4} + } + +vrrp_sync_group_statements: + vrrp_sync_group_statement vrrp_sync_group_statements + { + $$ = append([]StmtAny{$1}, $2...) + } + | vrrp_sync_group_statement { $$ = []StmtAny{$1} } vrrp_sync_group_statement: { } | STRING { } @@ -84,9 +126,18 @@ vrrp_group_ids: vrrp_group_id vrrp_group_ids | vrrp_group_id { } vrrp_group_id: STRING -vrrp_instance_block: VRRP_INSTANCE STRING LB vrrp_instance_statements RB +vrrp_instance_block : + VRRP_INSTANCE STRING LB vrrp_instance_statements RB + { + $$ = Block{name: $1.lit, stmts: $4} + } -vrrp_instance_statements: vrrp_instance_statement vrrp_instance_statements | vrrp_instance_statement +vrrp_instance_statements : + vrrp_instance_statement vrrp_instance_statements + { + $$ = append([]StmtAny{$1}, $2...) + } + | vrrp_instance_statement { $$ = []StmtAny{$1} } vrrp_instance_statement: { } | USE_VMAC { } @@ -100,13 +151,19 @@ vrrp_instance_statement: { } | LVS_SYNC_DAEMON_INTERFACE STRING { } | VIRTUAL_ROUTER_ID STRING { } | VIRTUAL_ROUTER_ID NUMBER { } -| NOPREEMPT +| NOPREEMPT { } | PREEMPT_DELAY NUMBER { } | PRIORITY NUMBER { } | ADVERT_INT NUMBER { } | VIRTUAL_IPADDRESS LB vips RB -| VIRTUAL_IPADDRESS_EXCLUDED LB vips_ex RB -| VIRTUAL_ROUTES LB virtual_routes_statements RB + { + $$ = StmtMulti{$1.lit, $3} + } +| VIRTUAL_IPADDRESS_EXCLUDED LB vips RB + { + $$ = StmtMulti{$1.lit, $3} + } +| VIRTUAL_ROUTES LB virtual_routes_statements RB { } | STATE MASTER { } | STATE BACKUP { } | GARP_MASTER_DELAY NUMBER { } @@ -142,9 +199,18 @@ track_script_statement: { } | STRING { } | STRING WEIGHT NUMBER { } -vrrp_script_block: VRRP_SCRIPT STRING LB vrrp_script_statements RB +vrrp_script_block: + VRRP_SCRIPT STRING LB vrrp_script_statements RB + { + $$ = Block{name: $1.lit, stmts: $4} + } -vrrp_script_statements: vrrp_script_statement vrrp_script_statements | vrrp_script_statement +vrrp_script_statements: + vrrp_script_statement vrrp_script_statements + { + $$ = append([]StmtAny{$1}, $2...) + } + | vrrp_script_statement { $$ = []StmtAny{$1} } vrrp_script_statement: { } | SCRIPT STRING { } @@ -156,75 +222,114 @@ vrrp_script_statement: { } virtual_routes_statements: virtual_server_statement virtual_server_statements | virtual_server_statement -virtual_server_statement: route_option route_options | route_option - -virtual_server_group_block: VIRTUAL_SERVER_GROUP STRING LB virtual_server_group_statements RB - -virtual_server_group_statements: virtual_server_group_statement virtual_server_group_statements | virtual_server_group_statement +virtual_server_statement: + route_option route_options + { + $$ = append([]StmtAny{$1}, $2...) + } + | route_option { $$ = []StmtAny{$1} } + +virtual_server_group_block: + VIRTUAL_SERVER_GROUP STRING LB virtual_server_group_statements RB + { + $$ = Block{name: $1.lit, stmts: $4} + } + +virtual_server_group_statements: + virtual_server_group_statement virtual_server_group_statements + { + $$ = append([]StmtAny{$1}, $2...) + } + | virtual_server_group_statement { $$ = []StmtAny{$1} } virtual_server_group_statement: { } | ip46 NUMBER { } | IPADDR_RANGE NUMBER { } | FWMARK NUMBER { } -virtual_server_block: VIRTUAL_SERVER virtual_server_arg LB virtual_server_statements RB +virtual_server_block: + VIRTUAL_SERVER virtual_server_arg LB virtual_server_statements RB + { + $$ = BlockArgs{Name: $1.lit, Args: $2, Stmts: $4} + } -virtual_server_statements: virtual_server_statement virtual_server_statements | virtual_server_statement +virtual_server_statements: + virtual_server_statement virtual_server_statements + { + $$ = append([]StmtAny{$1}, $2...) + } + | virtual_server_statement { $$ = []StmtAny{$1} } virtual_server_arg: -| ipport -| FWMARK NUMBER { } -| GROUP STRING { } - -virtual_server_statement: { } -| DELAY_LOOP NUMBER { } -| LB_ALGO lb_algo { } -| LB_KIND lb_kind { } -| LVS_SCHED lb_algo { } -| LVS_METHOD lb_kind { } -| PERSISTENCE_TIMEOUT NUMBER { } -| PROTOCOL protocol { } -| SORRY_SERVER ip46 NUMBER { } -| REAL_SERVER ip46 ipport LB real_server_statements RB -| REAL_SERVER ip46 NUMBER LB real_server_statements RB -| VIRTUALHOST STRING { } -| ALPHA -| OMEGA -| QUORUM NUMBER { } -| HYSTERESIS NUMBER { } -| QUORUM_UP STRING { } -| QUORUM_DOWN STRING { } - -real_server_statements: real_server_statement real_server_statements | real_server_statement { } - -real_server_statement: { } -| WEIGHT NUMBER { } -| INHIBIT_ON_FAILURE { } -| TCP_CHECK LB tcp_check_statements RB { } -| HTTP_GET LB http_get_statements RB { } -| SSL_GET LB http_get_statements RB { } -| SMTP_CHECK LB smtp_check_statements RB { } -| DNS_CHECK LB dns_check_statements RB { } -| MISC_CHECK LB misc_check_statements RB { } - -tcp_check_statements: tcp_check_statement tcp_check_statements | tcp_check_statement { } - -tcp_check_statement: { } -| CONNECT_PORT NUMBER { } -| CONNECT_TIMEOUT NUMBER { } -| RETRY NUMBER { } -| WARMUP NUMBER { } -| DELAY_BEFORE_RETRY NUMBER { } - -http_get_statements: http_get_statement http_get_statements | http_get_statement { } - -http_get_statement: { } -| URL LB url_statements RB { } -| CONNECT_TIMEOUT NUMBER { } -| CONNECT_PORT NUMBER { } -| NB_GET_RETRY NUMBER { } -| DELAY_BEFORE_RETRY NUMBER { } -| WARMUP NUMBER { } + ip46 NUMBER { $$ = []string{$1, $2.lit} } + | FWMARK NUMBER { $$ = []string{$1.lit, $2.lit} } + | GROUP STRING { $$ = []string{$1.lit, $2.lit} } + +virtual_server_statement: + DELAY_LOOP NUMBER { $$ = Stmt{$1.lit, $2.lit} } + | LB_ALGO lb_algo { $$ = Stmt{$1.lit, $2} } + | LB_KIND lb_kind { $$ = Stmt{$1.lit, $2} } + | LVS_SCHED lb_algo { $$ = Stmt{$1.lit, $2} } + | LVS_METHOD lb_kind { $$ = Stmt{$1.lit, $2} } + | PERSISTENCE_TIMEOUT NUMBER { $$ = Stmt{$1.lit, $2.lit} } + | PROTOCOL protocol { $$ = Stmt{$1.lit, $2} } + | SORRY_SERVER ip46 NUMBER { $$ = StmtMulti{$1.lit, []Value{$2, $3.lit}} } + | REAL_SERVER ip46 NUMBER LB real_server_statements RB + { + $$ = SubBlockArgs{Name: $1.lit, Args: []string{$2, $3.lit}, Stmts: $5} + } + | VIRTUALHOST STRING { $$ = Stmt{$1.lit, $2.lit} } + | ALPHA { $$ = $1.lit } + | OMEGA { $$ = $1.lit } + | QUORUM NUMBER { $$ = Stmt{$1.lit, $2.lit} } + | HYSTERESIS NUMBER { $$ = Stmt{$1.lit, $2.lit} } + | QUORUM_UP STRING { $$ = Stmt{$1.lit, $2.lit} } + | QUORUM_DOWN STRING { $$ = Stmt{$1.lit, $2.lit} } + +real_server_statements: + real_server_statement real_server_statements + { + $$ = append([]StmtAny{$1}, $2...) + } + | real_server_statement { $$ = []StmtAny{$1} } + +real_server_statement: + WEIGHT NUMBER { $$ = Stmt{$1.lit, $2.lit} } + | INHIBIT_ON_FAILURE { $$ = $1.lit } + | TCP_CHECK LB tcp_check_statements RB { $$ = Block{name: $1.lit, stmts: $3} } + | HTTP_GET LB http_get_statements RB { $$ = Block{name: $1.lit, stmts: $3} } + | SSL_GET LB http_get_statements RB { $$ = Block{name: $1.lit, stmts: $3} } + | SMTP_CHECK LB smtp_check_statements RB { $$ = Block{name: $1.lit, stmts: $3} } + | DNS_CHECK LB dns_check_statements RB { $$ = Block{name: $1.lit, stmts: $3} } + | MISC_CHECK LB misc_check_statements RB { $$ = Block{name: $1.lit, stmts: $3} } + +tcp_check_statements: + tcp_check_statement tcp_check_statements + { + $$ = append([]StmtAny{$1}, $2...) + } + | tcp_check_statement { $$ = []StmtAny{$1} } + +tcp_check_statement: + CONNECT_PORT NUMBER { $$ = Stmt{$1.lit, $2.lit} } + | CONNECT_TIMEOUT NUMBER { $$ = Stmt{$1.lit, $2.lit} } + | RETRY NUMBER { $$ = Stmt{$1.lit, $2.lit} } + | WARMUP NUMBER { $$ = Stmt{$1.lit, $2.lit} } + | DELAY_BEFORE_RETRY NUMBER { $$ = Stmt{$1.lit, $2.lit} } + +http_get_statements: http_get_statement http_get_statements + { + $$ = append([]StmtAny{$1}, $2...) + } + | http_get_statement { $$ = []StmtAny{$1} } + +http_get_statement: + URL LB url_statements RB { } + | CONNECT_TIMEOUT NUMBER { } + | CONNECT_PORT NUMBER { } + | NB_GET_RETRY NUMBER { } + | DELAY_BEFORE_RETRY NUMBER { } + | WARMUP NUMBER { } url_statements: url_statement url_statements | url_statement { } @@ -234,15 +339,15 @@ url_statement: { } | DIGEST HEX32 { } | STATUS_CODE NUMBER { } -smtp_check_statements: smtp_check_statement smtp_check_statements | smtp_check_statement { } +smtp_check_statements: smtp_check_statement smtp_check_statements { } | smtp_check_statement { } smtp_check_statement: { } | host_statement { } -| HOST LB host_statements RB -| WARMUP NUMBER -| RETRY NUMBER -| DELAY_BEFORE_RETRY NUMBER -| HELO_NAME STRING +| HOST LB host_statements RB { } +| WARMUP NUMBER { } +| RETRY NUMBER { } +| DELAY_BEFORE_RETRY NUMBER { } +| HELO_NAME STRING { } host_statements: host_statement host_statements | host_statement { } @@ -254,7 +359,7 @@ host_statement: { } | CONNECT_TIMEOUT NUMBER { } | FWMARK NUMBER { } -dns_check_statements: dns_check_statement dns_check_statements | dns_check_statement { } +dns_check_statements: dns_check_statement dns_check_statements { } | dns_check_statement { } dns_check_statement: { } | CONNECT_IP ip46 { } @@ -267,7 +372,7 @@ dns_check_statement: { } | TYPE STRING { } | NAME STRING { } -misc_check_statements: misc_check_statement misc_check_statements | misc_check_statement { } +misc_check_statements: misc_check_statement misc_check_statements { } | misc_check_statement { } misc_check_statement: { } | MISC_PATH STRING { } @@ -276,47 +381,47 @@ misc_check_statement: { } | WARMUP NUMBER { } | MISC_DYNAMIC { } -lb_algo: { } -| RR { } -| WRR { } -| LC { } -| WLC { } -| FO { } -| OVF { } -| LBLC { } -| LBLCR { } -| SH { } -| DH { } -| SED { } -| NQ { } - -lb_kind: { } -| NAT { } -| DR { } -| TUN { } - -protocol: { } -| TCP { } -| UDP { } - -vips: vip vips | vip { } - -vips_ex: vip_ex vips_ex | vip_ex { } - -vip: ipaddr_literal { } +lb_algo: + RR { $$ = $1.lit } + | WRR { $$ = $1.lit } + | LC { $$ = $1.lit } + | WLC { $$ = $1.lit } + | FO { $$ = $1.lit } + | OVF { $$ = $1.lit } + | LBLC { $$ = $1.lit } + | LBLCR { $$ = $1.lit } + | SH { $$ = $1.lit } + | DH { $$ = $1.lit } + | SED { $$ = $1.lit } + | NQ { $$ = $1.lit } + +lb_kind: + NAT { $$ = $1.lit } + | DR { $$ = $1.lit } + | TUN { $$ = $1.lit } + +protocol: + TCP { $$ = $1.lit } + | UDP { $$ = $1.lit } + +vips: + vip vips + { + $$ = append([]Value{$1}, $2...) + } + | vip { $$ = []Value{$1} } + +vip: + ipaddr_literal { $$ = VIPAddr{Addr: $1} } | LABEL STRING { } | DEV STRING { } | BRD ip46 { } -vip_ex: ipaddr_literal { } -| DEV STRING { } -| BRD ip46 { } - mail_statements: mail_statement mail_statements | mail_statement { } mail_statement: any_literal { } -address_options: address_option address_options | address_option +address_options: address_option address_options { } | address_option { } address_option: { } | ip46 @@ -325,31 +430,31 @@ address_option: { } | DEV STRING | SCOPE scope_val -route_options: route_option route_options | route_option +route_options: route_option route_options { } | route_option { } route_option: { } -| SRC ip46 -| TO ip46 -| TO IP_CIDR -| ip46 -| IP_CIDR -| VIA ip46 -| GW ip46 -| OR ip46 -| DEV STRING -| LABEL STRING -| TABLE NUMBER -| TABLE STRING -| METRIC NUMBER -| SCOPE scope_val -| BLACKHOLE ip46 -| BLACKHOLE IP_CIDR - -rule_option: { } -| FROM ip46 TABLE NUMBER -| TO ip46 TABLE NUMBER -| FROM IP_CIDR TABLE NUMBER -| TO IP_CIDR TABLE NUMBER +| SRC ip46 { } +| TO ip46 { } +| TO IP_CIDR { } +| ip46 { } +| IP_CIDR { } +| VIA ip46 { } +| GW ip46 { } +| OR ip46 { } +| DEV STRING { } +| LABEL STRING { } +| TABLE NUMBER { } +| TABLE STRING { } +| METRIC NUMBER { } +| SCOPE scope_val { } +| BLACKHOLE ip46 { } +| BLACKHOLE IP_CIDR { } + +rule_option: + FROM ip46 TABLE NUMBER { } +| TO ip46 TABLE NUMBER { } +| FROM IP_CIDR TABLE NUMBER { } +| TO IP_CIDR TABLE NUMBER { } scope_val: { } | SITE @@ -358,13 +463,13 @@ scope_val: { } | NOWHERE | GLOBAL -ipaddr_literal: { } -| ip46 -| IP_CIDR +ipaddr_literal: + ip46 { $$ = $1 } + | IP_CIDR { $$ = $1.lit } -ip46: { } -| IPV4 -| IPV6 +ip46: + IPV4 { $$ = $1.lit } + | IPV6 { $$ = $1.lit } ipport: { } | ip46 diff --git a/parser/testing.go b/parser/testing.go index d992dbd..c0507e1 100644 --- a/parser/testing.go +++ b/parser/testing.go @@ -4,7 +4,7 @@ func generateTestTokens(toks []int) []*Token { tokens := make([]*Token, 0, len(toks)) for _, tok := range toks { tokens = append(tokens, &Token{ - value: tok, + tok: tok, filename: "dummy.conf", // Whatever is fine line: 10, // Whatever is fine column: 2, // Whatever is fine