// Code generated by goyacc -v y.output -o parser.go -p mtail parser.y. DO NOT EDIT.

//line parser.y:5
/* #nosec G104 generated code, errors reported do not make sense */
package parser

import __yyfmt__ "fmt"

//line parser.y:6

import (
	"time"

	"github.com/golang/glog"
	"github.com/google/mtail/internal/metrics"
	"github.com/google/mtail/internal/runtime/compiler/ast"
	"github.com/google/mtail/internal/runtime/compiler/position"
)

//line parser.y:19
type mtailSymType struct {
	yys      int
	intVal   int64
	floatVal float64
	floats   []float64
	op       int
	text     string
	texts    []string
	flag     bool
	n        ast.Node
	kind     metrics.Kind
	duration time.Duration
}

const INVALID = 57346
const COUNTER = 57347
const GAUGE = 57348
const TIMER = 57349
const TEXT = 57350
const HISTOGRAM = 57351
const AFTER = 57352
const AS = 57353
const BY = 57354
const CONST = 57355
const HIDDEN = 57356
const DEF = 57357
const DEL = 57358
const NEXT = 57359
const OTHERWISE = 57360
const ELSE = 57361
const STOP = 57362
const BUCKETS = 57363
const BUILTIN = 57364
const REGEX = 57365
const STRING = 57366
const CAPREF = 57367
const CAPREF_NAMED = 57368
const ID = 57369
const DECO = 57370
const INTLITERAL = 57371
const FLOATLITERAL = 57372
const DURATIONLITERAL = 57373
const INC = 57374
const DEC = 57375
const DIV = 57376
const MOD = 57377
const MUL = 57378
const MINUS = 57379
const PLUS = 57380
const POW = 57381
const SHL = 57382
const SHR = 57383
const LT = 57384
const GT = 57385
const LE = 57386
const GE = 57387
const EQ = 57388
const NE = 57389
const BITAND = 57390
const XOR = 57391
const BITOR = 57392
const NOT = 57393
const AND = 57394
const OR = 57395
const ADD_ASSIGN = 57396
const ASSIGN = 57397
const MATCH = 57398
const NOT_MATCH = 57399
const LCURLY = 57400
const RCURLY = 57401
const LPAREN = 57402
const RPAREN = 57403
const LSQUARE = 57404
const RSQUARE = 57405
const COMMA = 57406
const NL = 57407

var mtailToknames = [...]string{
	"$end",
	"error",
	"$unk",
	"INVALID",
	"COUNTER",
	"GAUGE",
	"TIMER",
	"TEXT",
	"HISTOGRAM",
	"AFTER",
	"AS",
	"BY",
	"CONST",
	"HIDDEN",
	"DEF",
	"DEL",
	"NEXT",
	"OTHERWISE",
	"ELSE",
	"STOP",
	"BUCKETS",
	"BUILTIN",
	"REGEX",
	"STRING",
	"CAPREF",
	"CAPREF_NAMED",
	"ID",
	"DECO",
	"INTLITERAL",
	"FLOATLITERAL",
	"DURATIONLITERAL",
	"INC",
	"DEC",
	"DIV",
	"MOD",
	"MUL",
	"MINUS",
	"PLUS",
	"POW",
	"SHL",
	"SHR",
	"LT",
	"GT",
	"LE",
	"GE",
	"EQ",
	"NE",
	"BITAND",
	"XOR",
	"BITOR",
	"NOT",
	"AND",
	"OR",
	"ADD_ASSIGN",
	"ASSIGN",
	"MATCH",
	"NOT_MATCH",
	"LCURLY",
	"RCURLY",
	"LPAREN",
	"RPAREN",
	"LSQUARE",
	"RSQUARE",
	"COMMA",
	"NL",
}

var mtailStatenames = [...]string{}

const mtailEofCode = 1
const mtailErrCode = 2
const mtailInitialStackSize = 16

//line parser.y:715

//  tokenpos returns the position of the current token.
func tokenpos(mtaillex mtailLexer) position.Position {
	return mtaillex.(*parser).t.Pos
}

// markedpos returns the position recorded from the most recent mark_pos
// production.
func markedpos(mtaillex mtailLexer) position.Position {
	return mtaillex.(*parser).pos
}

// positionFromMark returns a position spanning from the last mark to the current position.
func positionFromMark(mtaillex mtailLexer) position.Position {
	tp := tokenpos(mtaillex)
	mp := markedpos(mtaillex)
	return *position.Merge(&mp, &tp)
}

//line yacctab:1
var mtailExca = [...]int{
	-1, 1,
	1, -1,
	-2, 0,
	-1, 2,
	1, 1,
	5, 93,
	6, 93,
	7, 93,
	8, 93,
	9, 93,
	-2, 121,
	-1, 22,
	65, 24,
	-2, 68,
	-1, 106,
	5, 93,
	6, 93,
	7, 93,
	8, 93,
	9, 93,
	-2, 121,
}

const mtailPrivate = 57344

const mtailLast = 242

var mtailAct = [...]int{
	168, 88, 127, 28, 15, 91, 42, 44, 27, 129,
	26, 41, 19, 30, 118, 126, 86, 40, 164, 22,
	54, 160, 177, 45, 128, 29, 176, 20, 89, 25,
	159, 160, 62, 63, 108, 87, 47, 85, 68, 46,
	165, 131, 76, 77, 74, 73, 2, 104, 50, 36,
	34, 35, 43, 166, 38, 39, 43, 87, 13, 62,
	63, 24, 90, 70, 72, 71, 170, 11, 23, 169,
	112, 10, 93, 94, 12, 49, 31, 110, 36, 34,
	35, 43, 139, 38, 39, 37, 137, 50, 107, 171,
	117, 130, 111, 49, 106, 97, 96, 36, 34, 35,
	43, 116, 38, 39, 115, 31, 105, 103, 15, 109,
	130, 1, 27, 136, 37, 172, 19, 66, 67, 16,
	180, 179, 104, 22, 138, 87, 130, 144, 157, 87,
	150, 20, 152, 37, 156, 153, 87, 87, 87, 161,
	163, 162, 148, 158, 65, 135, 151, 154, 155, 149,
	140, 100, 101, 99, 75, 119, 102, 174, 173, 120,
	121, 98, 130, 175, 122, 123, 124, 95, 64, 125,
	69, 13, 92, 36, 34, 35, 43, 178, 38, 39,
	11, 23, 78, 132, 10, 18, 133, 12, 61, 134,
	141, 36, 34, 35, 43, 167, 38, 39, 142, 143,
	31, 79, 80, 81, 82, 83, 84, 51, 53, 37,
	48, 55, 66, 67, 49, 146, 145, 33, 31, 114,
	52, 9, 8, 7, 113, 147, 50, 37, 6, 32,
	21, 17, 16, 56, 57, 58, 59, 60, 5, 14,
	4, 3,
}

var mtailPact = [...]int{
	-1000, -1000, 167, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
	-1000, 29, -1000, -1000, -22, 192, -1000, -45, 228, 7,
	7, -1000, 85, -1000, 0, 15, -1000, -10, -14, -1000,
	159, 149, -34, -1000, -1000, -1000, -1000, 149, -1000, -1000,
	32, -1000, 58, -1000, 117, -1000, 87, -1000, -22, -26,
	-1000, 50, -22, 73, -1000, 77, -1000, -1000, -1000, -1000,
	-1000, -51, -1000, -1000, -51, -1000, -1000, -1000, -51, -51,
	-1000, -1000, -1000, -51, -51, -51, -1000, -1000, -51, -1000,
	-1000, -1000, -1000, -1000, -1000, -1000, 85, -1000, 71, 149,
	-20, -1000, -51, -1000, -1000, -51, -1000, -1000, -51, -1000,
	-1000, -1000, -1000, 0, 14, -22, 54, -1000, 25, 59,
	-22, -1000, 180, 204, -1000, -1000, -1000, 149, -1000, 149,
	29, 149, 149, 149, 73, 149, -33, -1000, 7, -1000,
	53, -1000, 149, 149, 149, -1000, -1000, -1000, -43, 6,
	-1000, 22, -1000, -1000, -1000, 42, 65, 128, 7, 15,
	-1000, -1000, -1000, 159, 7, 7, -1000, -1000, 32, -1000,
	149, 58, 117, -1000, -1000, -1000, -1000, -38, -1000, -1000,
	-1000, -1000, -42, -1000, -1000, -1000, 42, 91, -1000, -1000,
	-1000,
}

var mtailPgo = [...]int{
	0, 46, 241, 15, 39, 240, 239, 238, 231, 3,
	7, 6, 16, 5, 230, 13, 17, 29, 24, 229,
	11, 61, 9, 228, 224, 223, 222, 25, 10, 221,
	219, 217, 2, 211, 199, 0, 198, 195, 185, 182,
	172, 170, 168, 167, 161, 154, 144, 127, 115, 111,
	1, 90, 109,
}

var mtailR1 = [...]int{
	0, 49, 1, 1, 2, 2, 2, 2, 2, 2,
	2, 2, 2, 2, 5, 5, 5, 6, 6, 6,
	7, 7, 4, 8, 8, 14, 14, 18, 18, 18,
	18, 42, 42, 17, 17, 41, 41, 41, 15, 15,
	39, 39, 39, 39, 39, 39, 16, 16, 40, 40,
	11, 11, 43, 43, 28, 28, 45, 45, 22, 21,
	21, 21, 10, 10, 44, 44, 44, 44, 13, 13,
	12, 12, 46, 46, 9, 9, 9, 9, 9, 9,
	9, 9, 19, 19, 20, 31, 31, 3, 3, 32,
	32, 27, 23, 38, 38, 24, 24, 24, 24, 30,
	30, 33, 33, 33, 33, 33, 36, 37, 37, 34,
	47, 48, 48, 48, 48, 25, 26, 29, 29, 35,
	35, 50, 52, 51, 51,
}

var mtailR2 = [...]int{
	0, 1, 0, 2, 1, 1, 1, 1, 1, 1,
	1, 3, 1, 1, 4, 2, 3, 1, 4, 1,
	1, 2, 3, 1, 1, 4, 4, 1, 1, 4,
	4, 1, 1, 1, 4, 1, 1, 1, 1, 4,
	1, 1, 1, 1, 1, 1, 1, 4, 1, 1,
	1, 4, 1, 1, 4, 4, 1, 1, 1, 1,
	4, 4, 1, 4, 1, 1, 1, 1, 1, 2,
	1, 2, 1, 1, 1, 1, 1, 1, 1, 3,
	1, 1, 1, 4, 1, 4, 5, 1, 3, 1,
	1, 5, 3, 0, 1, 2, 2, 2, 1, 1,
	1, 1, 1, 1, 1, 1, 2, 1, 3, 2,
	2, 1, 1, 3, 3, 4, 3, 5, 3, 1,
	1, 0, 0, 0, 1,
}

var mtailChk = [...]int{
	-1000, -49, -1, -2, -5, -7, -23, -25, -26, -29,
	17, 13, 20, 4, -6, -50, 65, -8, -38, -22,
	-18, -14, -12, 14, -21, -17, -28, -13, -9, -27,
	-15, 51, -19, -31, 25, 26, 24, 60, 29, 30,
	-16, -20, -11, 27, -10, -20, -4, 58, 18, 22,
	34, 15, 28, 16, 65, -33, 5, 6, 7, 8,
	9, -42, 52, 53, -42, -46, 32, 33, 38, -41,
	48, 50, 49, 55, 54, -45, 56, 57, -39, 42,
	43, 44, 45, 46, 47, -13, -12, -9, -50, 62,
	-18, -13, -40, 40, 41, -43, 38, 37, -44, 36,
	34, 35, 39, -21, -50, 19, -1, -4, 60, -52,
	27, -4, -12, -24, -30, 27, 24, -51, 65, -51,
	-51, -51, -51, -51, -51, -51, -3, -32, -18, -22,
	-50, 61, -51, -51, -51, -4, 59, 61, -3, 23,
	-4, 10, -36, -34, -47, 12, 11, 21, -18, -17,
	-28, -27, -20, -15, -18, -18, -22, -9, -16, 63,
	64, -11, -10, -13, 61, 34, 31, -37, -35, 27,
	24, 24, -48, 30, 29, -32, 64, 64, -35, 30,
	29,
}

var mtailDef = [...]int{
	2, -2, -2, 3, 4, 5, 6, 7, 8, 9,
	10, 0, 12, 13, 0, 0, 20, 0, 0, 17,
	19, 23, -2, 94, 58, 27, 28, 62, 70, 59,
	33, 121, 74, 75, 76, 77, 78, 121, 80, 81,
	38, 82, 46, 84, 50, 121, 15, 2, 0, 0,
	122, 0, 0, 121, 21, 0, 101, 102, 103, 104,
	105, 123, 31, 32, 123, 71, 72, 73, 123, 123,
	35, 36, 37, 123, 123, 123, 56, 57, 123, 40,
	41, 42, 43, 44, 45, 69, 68, 70, 0, 121,
	0, 62, 123, 48, 49, 123, 52, 53, 123, 64,
	65, 66, 67, 11, 0, 0, -2, 16, 121, 0,
	0, 116, 118, 92, 98, 99, 100, 121, 124, 121,
	121, 121, 121, 121, 121, 121, 0, 87, 89, 90,
	0, 79, 121, 121, 121, 14, 22, 85, 0, 0,
	115, 0, 95, 96, 97, 0, 0, 0, 18, 29,
	30, 60, 61, 34, 25, 26, 54, 55, 39, 83,
	121, 47, 51, 63, 86, 91, 117, 106, 107, 119,
	120, 109, 110, 111, 112, 88, 0, 0, 108, 113,
	114,
}

var mtailTok1 = [...]int{
	1,
}

var mtailTok2 = [...]int{
	2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
	12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
	22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
	32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
	42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
	52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
	62, 63, 64, 65,
}

var mtailTok3 = [...]int{
	0,
}

var mtailErrorMessages = [...]struct {
	state int
	token int
	msg   string
}{
	{109, 4, "unexpected end of file, expecting '/' to end regex"},
	{15, 1, "unexpected end of file, expecting '}' to end block"},
	{15, 1, "unexpected end of file, expecting '}' to end block"},
	{15, 1, "unexpected end of file, expecting '}' to end block"},
	{14, 62, "unexpected indexing of an expression"},
	{14, 65, "statement with no effect, missing an assignment, `+' concatenation, or `{}' block?"},
}

//line yaccpar:1

/*	parser for yacc output	*/

var (
	mtailDebug        = 0
	mtailErrorVerbose = false
)

type mtailLexer interface {
	Lex(lval *mtailSymType) int
	Error(s string)
}

type mtailParser interface {
	Parse(mtailLexer) int
	Lookahead() int
}

type mtailParserImpl struct {
	lval  mtailSymType
	stack [mtailInitialStackSize]mtailSymType
	char  int
}

func (p *mtailParserImpl) Lookahead() int {
	return p.char
}

func mtailNewParser() mtailParser {
	return &mtailParserImpl{}
}

const mtailFlag = -1000

func mtailTokname(c int) string {
	if c >= 1 && c-1 < len(mtailToknames) {
		if mtailToknames[c-1] != "" {
			return mtailToknames[c-1]
		}
	}
	return __yyfmt__.Sprintf("tok-%v", c)
}

func mtailStatname(s int) string {
	if s >= 0 && s < len(mtailStatenames) {
		if mtailStatenames[s] != "" {
			return mtailStatenames[s]
		}
	}
	return __yyfmt__.Sprintf("state-%v", s)
}

func mtailErrorMessage(state, lookAhead int) string {
	const TOKSTART = 4

	if !mtailErrorVerbose {
		return "syntax error"
	}

	for _, e := range mtailErrorMessages {
		if e.state == state && e.token == lookAhead {
			return "syntax error: " + e.msg
		}
	}

	res := "syntax error: unexpected " + mtailTokname(lookAhead)

	// To match Bison, suggest at most four expected tokens.
	expected := make([]int, 0, 4)

	// Look for shiftable tokens.
	base := mtailPact[state]
	for tok := TOKSTART; tok-1 < len(mtailToknames); tok++ {
		if n := base + tok; n >= 0 && n < mtailLast && mtailChk[mtailAct[n]] == tok {
			if len(expected) == cap(expected) {
				return res
			}
			expected = append(expected, tok)
		}
	}

	if mtailDef[state] == -2 {
		i := 0
		for mtailExca[i] != -1 || mtailExca[i+1] != state {
			i += 2
		}

		// Look for tokens that we accept or reduce.
		for i += 2; mtailExca[i] >= 0; i += 2 {
			tok := mtailExca[i]
			if tok < TOKSTART || mtailExca[i+1] == 0 {
				continue
			}
			if len(expected) == cap(expected) {
				return res
			}
			expected = append(expected, tok)
		}

		// If the default action is to accept or reduce, give up.
		if mtailExca[i+1] != 0 {
			return res
		}
	}

	for i, tok := range expected {
		if i == 0 {
			res += ", expecting "
		} else {
			res += " or "
		}
		res += mtailTokname(tok)
	}
	return res
}

func mtaillex1(lex mtailLexer, lval *mtailSymType) (char, token int) {
	token = 0
	char = lex.Lex(lval)
	if char <= 0 {
		token = mtailTok1[0]
		goto out
	}
	if char < len(mtailTok1) {
		token = mtailTok1[char]
		goto out
	}
	if char >= mtailPrivate {
		if char < mtailPrivate+len(mtailTok2) {
			token = mtailTok2[char-mtailPrivate]
			goto out
		}
	}
	for i := 0; i < len(mtailTok3); i += 2 {
		token = mtailTok3[i+0]
		if token == char {
			token = mtailTok3[i+1]
			goto out
		}
	}

out:
	if token == 0 {
		token = mtailTok2[1] /* unknown char */
	}
	if mtailDebug >= 3 {
		__yyfmt__.Printf("lex %s(%d)\n", mtailTokname(token), uint(char))
	}
	return char, token
}

func mtailParse(mtaillex mtailLexer) int {
	return mtailNewParser().Parse(mtaillex)
}

func (mtailrcvr *mtailParserImpl) Parse(mtaillex mtailLexer) int {
	var mtailn int
	var mtailVAL mtailSymType
	var mtailDollar []mtailSymType
	_ = mtailDollar // silence set and not used
	mtailS := mtailrcvr.stack[:]

	Nerrs := 0   /* number of errors */
	Errflag := 0 /* error recovery flag */
	mtailstate := 0
	mtailrcvr.char = -1
	mtailtoken := -1 // mtailrcvr.char translated into internal numbering
	defer func() {
		// Make sure we report no lookahead when not parsing.
		mtailstate = -1
		mtailrcvr.char = -1
		mtailtoken = -1
	}()
	mtailp := -1
	goto mtailstack

ret0:
	return 0

ret1:
	return 1

mtailstack:
	/* put a state and value onto the stack */
	if mtailDebug >= 4 {
		__yyfmt__.Printf("char %v in %v\n", mtailTokname(mtailtoken), mtailStatname(mtailstate))
	}

	mtailp++
	if mtailp >= len(mtailS) {
		nyys := make([]mtailSymType, len(mtailS)*2)
		copy(nyys, mtailS)
		mtailS = nyys
	}
	mtailS[mtailp] = mtailVAL
	mtailS[mtailp].yys = mtailstate

mtailnewstate:
	mtailn = mtailPact[mtailstate]
	if mtailn <= mtailFlag {
		goto mtaildefault /* simple state */
	}
	if mtailrcvr.char < 0 {
		mtailrcvr.char, mtailtoken = mtaillex1(mtaillex, &mtailrcvr.lval)
	}
	mtailn += mtailtoken
	if mtailn < 0 || mtailn >= mtailLast {
		goto mtaildefault
	}
	mtailn = mtailAct[mtailn]
	if mtailChk[mtailn] == mtailtoken { /* valid shift */
		mtailrcvr.char = -1
		mtailtoken = -1
		mtailVAL = mtailrcvr.lval
		mtailstate = mtailn
		if Errflag > 0 {
			Errflag--
		}
		goto mtailstack
	}

mtaildefault:
	/* default state action */
	mtailn = mtailDef[mtailstate]
	if mtailn == -2 {
		if mtailrcvr.char < 0 {
			mtailrcvr.char, mtailtoken = mtaillex1(mtaillex, &mtailrcvr.lval)
		}

		/* look through exception table */
		xi := 0
		for {
			if mtailExca[xi+0] == -1 && mtailExca[xi+1] == mtailstate {
				break
			}
			xi += 2
		}
		for xi += 2; ; xi += 2 {
			mtailn = mtailExca[xi+0]
			if mtailn < 0 || mtailn == mtailtoken {
				break
			}
		}
		mtailn = mtailExca[xi+1]
		if mtailn < 0 {
			goto ret0
		}
	}
	if mtailn == 0 {
		/* error ... attempt to resume parsing */
		switch Errflag {
		case 0: /* brand new error */
			mtaillex.Error(mtailErrorMessage(mtailstate, mtailtoken))
			Nerrs++
			if mtailDebug >= 1 {
				__yyfmt__.Printf("%s", mtailStatname(mtailstate))
				__yyfmt__.Printf(" saw %s\n", mtailTokname(mtailtoken))
			}
			fallthrough

		case 1, 2: /* incompletely recovered error ... try again */
			Errflag = 3

			/* find a state where "error" is a legal shift action */
			for mtailp >= 0 {
				mtailn = mtailPact[mtailS[mtailp].yys] + mtailErrCode
				if mtailn >= 0 && mtailn < mtailLast {
					mtailstate = mtailAct[mtailn] /* simulate a shift of "error" */
					if mtailChk[mtailstate] == mtailErrCode {
						goto mtailstack
					}
				}

				/* the current p has no shift on "error", pop stack */
				if mtailDebug >= 2 {
					__yyfmt__.Printf("error recovery pops state %d\n", mtailS[mtailp].yys)
				}
				mtailp--
			}
			/* there is no state on the stack with an error shift ... abort */
			goto ret1

		case 3: /* no shift yet; clobber input char */
			if mtailDebug >= 2 {
				__yyfmt__.Printf("error recovery discards %s\n", mtailTokname(mtailtoken))
			}
			if mtailtoken == mtailEofCode {
				goto ret1
			}
			mtailrcvr.char = -1
			mtailtoken = -1
			goto mtailnewstate /* try again in the same state */
		}
	}

	/* reduction by production mtailn */
	if mtailDebug >= 2 {
		__yyfmt__.Printf("reduce %v in:\n\t%v\n", mtailn, mtailStatname(mtailstate))
	}

	mtailnt := mtailn
	mtailpt := mtailp
	_ = mtailpt // guard against "declared and not used"

	mtailp -= mtailR2[mtailn]
	// mtailp is now the index of $0. Perform the default action. Iff the
	// reduced production is ε, $1 is possibly out of range.
	if mtailp+1 >= len(mtailS) {
		nyys := make([]mtailSymType, len(mtailS)*2)
		copy(nyys, mtailS)
		mtailS = nyys
	}
	mtailVAL = mtailS[mtailp+1]

	/* consult goto table to find next state */
	mtailn = mtailR1[mtailn]
	mtailg := mtailPgo[mtailn]
	mtailj := mtailg + mtailS[mtailp].yys + 1

	if mtailj >= mtailLast {
		mtailstate = mtailAct[mtailg]
	} else {
		mtailstate = mtailAct[mtailj]
		if mtailChk[mtailstate] != -mtailn {
			mtailstate = mtailAct[mtailg]
		}
	}
	// dummy call; replaced with literal code
	switch mtailnt {

	case 1:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:92
		{
			mtaillex.(*parser).root = mtailDollar[1].n
		}
	case 2:
		mtailDollar = mtailS[mtailpt-0 : mtailpt+1]
//line parser.y:100
		{
			mtailVAL.n = &ast.StmtList{}
		}
	case 3:
		mtailDollar = mtailS[mtailpt-2 : mtailpt+1]
//line parser.y:104
		{
			mtailVAL.n = mtailDollar[1].n
			if mtailDollar[2].n != nil {
				mtailVAL.n.(*ast.StmtList).Children = append(mtailVAL.n.(*ast.StmtList).Children, mtailDollar[2].n)
			}
		}
	case 4:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:115
		{
			mtailVAL.n = mtailDollar[1].n
		}
	case 5:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:117
		{
			mtailVAL.n = mtailDollar[1].n
		}
	case 6:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:119
		{
			mtailVAL.n = mtailDollar[1].n
		}
	case 7:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:121
		{
			mtailVAL.n = mtailDollar[1].n
		}
	case 8:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:123
		{
			mtailVAL.n = mtailDollar[1].n
		}
	case 9:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:125
		{
			mtailVAL.n = mtailDollar[1].n
		}
	case 10:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:127
		{
			mtailVAL.n = &ast.NextStmt{tokenpos(mtaillex)}
		}
	case 11:
		mtailDollar = mtailS[mtailpt-3 : mtailpt+1]
//line parser.y:131
		{
			mtailVAL.n = &ast.PatternFragment{ID: mtailDollar[2].n, Expr: mtailDollar[3].n}
		}
	case 12:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:135
		{
			mtailVAL.n = &ast.StopStmt{tokenpos(mtaillex)}
		}
	case 13:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:139
		{
			mtailVAL.n = &ast.Error{tokenpos(mtaillex), mtailDollar[1].text}
		}
	case 14:
		mtailDollar = mtailS[mtailpt-4 : mtailpt+1]
//line parser.y:147
		{
			mtailVAL.n = &ast.CondStmt{mtailDollar[1].n, mtailDollar[2].n, mtailDollar[4].n, nil}
		}
	case 15:
		mtailDollar = mtailS[mtailpt-2 : mtailpt+1]
//line parser.y:151
		{
			if mtailDollar[1].n != nil {
				mtailVAL.n = &ast.CondStmt{mtailDollar[1].n, mtailDollar[2].n, nil, nil}
			} else {
				mtailVAL.n = mtailDollar[2].n
			}
		}
	case 16:
		mtailDollar = mtailS[mtailpt-3 : mtailpt+1]
//line parser.y:159
		{
			o := &ast.OtherwiseStmt{positionFromMark(mtaillex)}
			mtailVAL.n = &ast.CondStmt{o, mtailDollar[3].n, nil, nil}
		}
	case 17:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:167
		{
			mtailVAL.n = &ast.UnaryExpr{P: tokenpos(mtaillex), Expr: mtailDollar[1].n, Op: MATCH}
		}
	case 18:
		mtailDollar = mtailS[mtailpt-4 : mtailpt+1]
//line parser.y:171
		{
			mtailVAL.n = &ast.BinaryExpr{
				LHS: &ast.UnaryExpr{P: tokenpos(mtaillex), Expr: mtailDollar[1].n, Op: MATCH},
				RHS: mtailDollar[4].n,
				Op:  mtailDollar[2].op,
			}
		}
	case 19:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:179
		{
			mtailVAL.n = mtailDollar[1].n
		}
	case 20:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:185
		{
			mtailVAL.n = nil
		}
	case 21:
		mtailDollar = mtailS[mtailpt-2 : mtailpt+1]
//line parser.y:187
		{
			mtailVAL.n = mtailDollar[1].n
		}
	case 22:
		mtailDollar = mtailS[mtailpt-3 : mtailpt+1]
//line parser.y:193
		{
			mtailVAL.n = mtailDollar[2].n
		}
	case 23:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:201
		{
			mtailVAL.n = mtailDollar[1].n
		}
	case 24:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:203
		{
			mtailVAL.n = mtailDollar[1].n
		}
	case 25:
		mtailDollar = mtailS[mtailpt-4 : mtailpt+1]
//line parser.y:209
		{
			mtailVAL.n = &ast.BinaryExpr{LHS: mtailDollar[1].n, RHS: mtailDollar[4].n, Op: mtailDollar[2].op}
		}
	case 26:
		mtailDollar = mtailS[mtailpt-4 : mtailpt+1]
//line parser.y:213
		{
			mtailVAL.n = &ast.BinaryExpr{LHS: mtailDollar[1].n, RHS: mtailDollar[4].n, Op: mtailDollar[2].op}
		}
	case 27:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:221
		{
			mtailVAL.n = mtailDollar[1].n
		}
	case 28:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:223
		{
			mtailVAL.n = mtailDollar[1].n
		}
	case 29:
		mtailDollar = mtailS[mtailpt-4 : mtailpt+1]
//line parser.y:225
		{
			mtailVAL.n = &ast.BinaryExpr{LHS: mtailDollar[1].n, RHS: mtailDollar[4].n, Op: mtailDollar[2].op}
		}
	case 30:
		mtailDollar = mtailS[mtailpt-4 : mtailpt+1]
//line parser.y:229
		{
			mtailVAL.n = &ast.BinaryExpr{LHS: mtailDollar[1].n, RHS: mtailDollar[4].n, Op: mtailDollar[2].op}
		}
	case 31:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:236
		{
			mtailVAL.op = mtailDollar[1].op
		}
	case 32:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:238
		{
			mtailVAL.op = mtailDollar[1].op
		}
	case 33:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:244
		{
			mtailVAL.n = mtailDollar[1].n
		}
	case 34:
		mtailDollar = mtailS[mtailpt-4 : mtailpt+1]
//line parser.y:246
		{
			mtailVAL.n = &ast.BinaryExpr{LHS: mtailDollar[1].n, RHS: mtailDollar[4].n, Op: mtailDollar[2].op}
		}
	case 35:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:253
		{
			mtailVAL.op = mtailDollar[1].op
		}
	case 36:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:255
		{
			mtailVAL.op = mtailDollar[1].op
		}
	case 37:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:257
		{
			mtailVAL.op = mtailDollar[1].op
		}
	case 38:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:263
		{
			mtailVAL.n = mtailDollar[1].n
		}
	case 39:
		mtailDollar = mtailS[mtailpt-4 : mtailpt+1]
//line parser.y:265
		{
			mtailVAL.n = &ast.BinaryExpr{LHS: mtailDollar[1].n, RHS: mtailDollar[4].n, Op: mtailDollar[2].op}
		}
	case 40:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:272
		{
			mtailVAL.op = mtailDollar[1].op
		}
	case 41:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:274
		{
			mtailVAL.op = mtailDollar[1].op
		}
	case 42:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:276
		{
			mtailVAL.op = mtailDollar[1].op
		}
	case 43:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:278
		{
			mtailVAL.op = mtailDollar[1].op
		}
	case 44:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:280
		{
			mtailVAL.op = mtailDollar[1].op
		}
	case 45:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:282
		{
			mtailVAL.op = mtailDollar[1].op
		}
	case 46:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:288
		{
			mtailVAL.n = mtailDollar[1].n
		}
	case 47:
		mtailDollar = mtailS[mtailpt-4 : mtailpt+1]
//line parser.y:290
		{
			mtailVAL.n = &ast.BinaryExpr{LHS: mtailDollar[1].n, RHS: mtailDollar[4].n, Op: mtailDollar[2].op}
		}
	case 48:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:297
		{
			mtailVAL.op = mtailDollar[1].op
		}
	case 49:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:299
		{
			mtailVAL.op = mtailDollar[1].op
		}
	case 50:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:305
		{
			mtailVAL.n = mtailDollar[1].n
		}
	case 51:
		mtailDollar = mtailS[mtailpt-4 : mtailpt+1]
//line parser.y:307
		{
			mtailVAL.n = &ast.BinaryExpr{LHS: mtailDollar[1].n, RHS: mtailDollar[4].n, Op: mtailDollar[2].op}
		}
	case 52:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:314
		{
			mtailVAL.op = mtailDollar[1].op
		}
	case 53:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:316
		{
			mtailVAL.op = mtailDollar[1].op
		}
	case 54:
		mtailDollar = mtailS[mtailpt-4 : mtailpt+1]
//line parser.y:322
		{
			mtailVAL.n = &ast.BinaryExpr{LHS: mtailDollar[1].n, RHS: mtailDollar[4].n, Op: mtailDollar[2].op}
		}
	case 55:
		mtailDollar = mtailS[mtailpt-4 : mtailpt+1]
//line parser.y:326
		{
			mtailVAL.n = &ast.BinaryExpr{LHS: mtailDollar[1].n, RHS: mtailDollar[4].n, Op: mtailDollar[2].op}
		}
	case 56:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:333
		{
			mtailVAL.op = mtailDollar[1].op
		}
	case 57:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:335
		{
			mtailVAL.op = mtailDollar[1].op
		}
	case 58:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:342
		{
			mtailVAL.n = &ast.PatternExpr{Expr: mtailDollar[1].n}
		}
	case 59:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:350
		{
			mtailVAL.n = mtailDollar[1].n
		}
	case 60:
		mtailDollar = mtailS[mtailpt-4 : mtailpt+1]
//line parser.y:352
		{
			mtailVAL.n = &ast.BinaryExpr{LHS: mtailDollar[1].n, RHS: mtailDollar[4].n, Op: PLUS}
		}
	case 61:
		mtailDollar = mtailS[mtailpt-4 : mtailpt+1]
//line parser.y:356
		{
			mtailVAL.n = &ast.BinaryExpr{LHS: mtailDollar[1].n, RHS: mtailDollar[4].n, Op: PLUS}
		}
	case 62:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:364
		{
			mtailVAL.n = mtailDollar[1].n
		}
	case 63:
		mtailDollar = mtailS[mtailpt-4 : mtailpt+1]
//line parser.y:366
		{
			mtailVAL.n = &ast.BinaryExpr{LHS: mtailDollar[1].n, RHS: mtailDollar[4].n, Op: mtailDollar[2].op}
		}
	case 64:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:373
		{
			mtailVAL.op = mtailDollar[1].op
		}
	case 65:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:375
		{
			mtailVAL.op = mtailDollar[1].op
		}
	case 66:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:377
		{
			mtailVAL.op = mtailDollar[1].op
		}
	case 67:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:379
		{
			mtailVAL.op = mtailDollar[1].op
		}
	case 68:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:385
		{
			mtailVAL.n = mtailDollar[1].n
		}
	case 69:
		mtailDollar = mtailS[mtailpt-2 : mtailpt+1]
//line parser.y:387
		{
			mtailVAL.n = &ast.UnaryExpr{P: tokenpos(mtaillex), Expr: mtailDollar[2].n, Op: mtailDollar[1].op}
		}
	case 70:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:395
		{
			mtailVAL.n = mtailDollar[1].n
		}
	case 71:
		mtailDollar = mtailS[mtailpt-2 : mtailpt+1]
//line parser.y:397
		{
			mtailVAL.n = &ast.UnaryExpr{P: tokenpos(mtaillex), Expr: mtailDollar[1].n, Op: mtailDollar[2].op}
		}
	case 72:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:404
		{
			mtailVAL.op = mtailDollar[1].op
		}
	case 73:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:406
		{
			mtailVAL.op = mtailDollar[1].op
		}
	case 74:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:412
		{
			mtailVAL.n = mtailDollar[1].n
		}
	case 75:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:414
		{
			mtailVAL.n = mtailDollar[1].n
		}
	case 76:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:416
		{
			mtailVAL.n = &ast.CaprefTerm{tokenpos(mtaillex), mtailDollar[1].text, false, nil}
		}
	case 77:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:420
		{
			mtailVAL.n = &ast.CaprefTerm{tokenpos(mtaillex), mtailDollar[1].text, true, nil}
		}
	case 78:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:424
		{
			mtailVAL.n = &ast.StringLit{tokenpos(mtaillex), mtailDollar[1].text}
		}
	case 79:
		mtailDollar = mtailS[mtailpt-3 : mtailpt+1]
//line parser.y:428
		{
			mtailVAL.n = mtailDollar[2].n
		}
	case 80:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:432
		{
			mtailVAL.n = &ast.IntLit{tokenpos(mtaillex), mtailDollar[1].intVal}
		}
	case 81:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:436
		{
			mtailVAL.n = &ast.FloatLit{tokenpos(mtaillex), mtailDollar[1].floatVal}
		}
	case 82:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:444
		{
			// Build an empty IndexedExpr so that the recursive rule below doesn't need to handle the alternative.
			mtailVAL.n = &ast.IndexedExpr{LHS: mtailDollar[1].n, Index: &ast.ExprList{}}
		}
	case 83:
		mtailDollar = mtailS[mtailpt-4 : mtailpt+1]
//line parser.y:449
		{
			mtailVAL.n = mtailDollar[1].n
			mtailVAL.n.(*ast.IndexedExpr).Index.(*ast.ExprList).Children = append(
				mtailVAL.n.(*ast.IndexedExpr).Index.(*ast.ExprList).Children,
				mtailDollar[3].n.(*ast.ExprList).Children...)
		}
	case 84:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:460
		{
			mtailVAL.n = &ast.IDTerm{tokenpos(mtaillex), mtailDollar[1].text, nil, false}
		}
	case 85:
		mtailDollar = mtailS[mtailpt-4 : mtailpt+1]
//line parser.y:468
		{
			mtailVAL.n = &ast.BuiltinExpr{P: positionFromMark(mtaillex), Name: mtailDollar[2].text, Args: nil}
		}
	case 86:
		mtailDollar = mtailS[mtailpt-5 : mtailpt+1]
//line parser.y:472
		{
			mtailVAL.n = &ast.BuiltinExpr{P: positionFromMark(mtaillex), Name: mtailDollar[2].text, Args: mtailDollar[4].n}
		}
	case 87:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:481
		{
			mtailVAL.n = &ast.ExprList{}
			mtailVAL.n.(*ast.ExprList).Children = append(mtailVAL.n.(*ast.ExprList).Children, mtailDollar[1].n)
		}
	case 88:
		mtailDollar = mtailS[mtailpt-3 : mtailpt+1]
//line parser.y:486
		{
			mtailVAL.n = mtailDollar[1].n
			mtailVAL.n.(*ast.ExprList).Children = append(mtailVAL.n.(*ast.ExprList).Children, mtailDollar[3].n)
		}
	case 89:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:494
		{
			mtailVAL.n = mtailDollar[1].n
		}
	case 90:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:496
		{
			mtailVAL.n = mtailDollar[1].n
		}
	case 91:
		mtailDollar = mtailS[mtailpt-5 : mtailpt+1]
//line parser.y:502
		{
			mtailVAL.n = &ast.PatternLit{P: positionFromMark(mtaillex), Pattern: mtailDollar[4].text}
		}
	case 92:
		mtailDollar = mtailS[mtailpt-3 : mtailpt+1]
//line parser.y:510
		{
			mtailVAL.n = mtailDollar[3].n
			d := mtailVAL.n.(*ast.VarDecl)
			d.Kind = mtailDollar[2].kind
			d.Hidden = mtailDollar[1].flag
		}
	case 93:
		mtailDollar = mtailS[mtailpt-0 : mtailpt+1]
//line parser.y:521
		{
			mtailVAL.flag = false
		}
	case 94:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:525
		{
			mtailVAL.flag = true
		}
	case 95:
		mtailDollar = mtailS[mtailpt-2 : mtailpt+1]
//line parser.y:533
		{
			mtailVAL.n = mtailDollar[1].n
			mtailVAL.n.(*ast.VarDecl).Keys = mtailDollar[2].texts
		}
	case 96:
		mtailDollar = mtailS[mtailpt-2 : mtailpt+1]
//line parser.y:538
		{
			mtailVAL.n = mtailDollar[1].n
			mtailVAL.n.(*ast.VarDecl).ExportedName = mtailDollar[2].text
		}
	case 97:
		mtailDollar = mtailS[mtailpt-2 : mtailpt+1]
//line parser.y:543
		{
			mtailVAL.n = mtailDollar[1].n
			mtailVAL.n.(*ast.VarDecl).Buckets = mtailDollar[2].floats
		}
	case 98:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:548
		{
			mtailVAL.n = mtailDollar[1].n
		}
	case 99:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:556
		{
			mtailVAL.n = &ast.VarDecl{P: tokenpos(mtaillex), Name: mtailDollar[1].text}
		}
	case 100:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:560
		{
			mtailVAL.n = &ast.VarDecl{P: tokenpos(mtaillex), Name: mtailDollar[1].text}
		}
	case 101:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:568
		{
			mtailVAL.kind = metrics.Counter
		}
	case 102:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:572
		{
			mtailVAL.kind = metrics.Gauge
		}
	case 103:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:576
		{
			mtailVAL.kind = metrics.Timer
		}
	case 104:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:580
		{
			mtailVAL.kind = metrics.Text
		}
	case 105:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:584
		{
			mtailVAL.kind = metrics.Histogram
		}
	case 106:
		mtailDollar = mtailS[mtailpt-2 : mtailpt+1]
//line parser.y:592
		{
			mtailVAL.texts = mtailDollar[2].texts
		}
	case 107:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:599
		{
			mtailVAL.texts = make([]string, 0)
			mtailVAL.texts = append(mtailVAL.texts, mtailDollar[1].text)
		}
	case 108:
		mtailDollar = mtailS[mtailpt-3 : mtailpt+1]
//line parser.y:604
		{
			mtailVAL.texts = mtailDollar[1].texts
			mtailVAL.texts = append(mtailVAL.texts, mtailDollar[3].text)
		}
	case 109:
		mtailDollar = mtailS[mtailpt-2 : mtailpt+1]
//line parser.y:613
		{
			mtailVAL.text = mtailDollar[2].text
		}
	case 110:
		mtailDollar = mtailS[mtailpt-2 : mtailpt+1]
//line parser.y:621
		{
			mtailVAL.floats = mtailDollar[2].floats
		}
	case 111:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:627
		{
			mtailVAL.floats = make([]float64, 0)
			mtailVAL.floats = append(mtailVAL.floats, mtailDollar[1].floatVal)
		}
	case 112:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:632
		{
			mtailVAL.floats = make([]float64, 0)
			mtailVAL.floats = append(mtailVAL.floats, float64(mtailDollar[1].intVal))
		}
	case 113:
		mtailDollar = mtailS[mtailpt-3 : mtailpt+1]
//line parser.y:637
		{
			mtailVAL.floats = mtailDollar[1].floats
			mtailVAL.floats = append(mtailVAL.floats, mtailDollar[3].floatVal)
		}
	case 114:
		mtailDollar = mtailS[mtailpt-3 : mtailpt+1]
//line parser.y:642
		{
			mtailVAL.floats = mtailDollar[1].floats
			mtailVAL.floats = append(mtailVAL.floats, float64(mtailDollar[3].intVal))
		}
	case 115:
		mtailDollar = mtailS[mtailpt-4 : mtailpt+1]
//line parser.y:650
		{
			mtailVAL.n = &ast.DecoDecl{P: markedpos(mtaillex), Name: mtailDollar[3].text, Block: mtailDollar[4].n}
		}
	case 116:
		mtailDollar = mtailS[mtailpt-3 : mtailpt+1]
//line parser.y:658
		{
			mtailVAL.n = &ast.DecoStmt{markedpos(mtaillex), mtailDollar[2].text, mtailDollar[3].n, nil, nil}
		}
	case 117:
		mtailDollar = mtailS[mtailpt-5 : mtailpt+1]
//line parser.y:666
		{
			mtailVAL.n = &ast.DelStmt{P: positionFromMark(mtaillex), N: mtailDollar[3].n, Expiry: mtailDollar[5].duration}
		}
	case 118:
		mtailDollar = mtailS[mtailpt-3 : mtailpt+1]
//line parser.y:670
		{
			mtailVAL.n = &ast.DelStmt{P: positionFromMark(mtaillex), N: mtailDollar[3].n}
		}
	case 119:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:677
		{
			mtailVAL.text = mtailDollar[1].text
		}
	case 120:
		mtailDollar = mtailS[mtailpt-1 : mtailpt+1]
//line parser.y:681
		{
			mtailVAL.text = mtailDollar[1].text
		}
	case 121:
		mtailDollar = mtailS[mtailpt-0 : mtailpt+1]
//line parser.y:691
		{
			glog.V(2).Infof("position marked at %v", tokenpos(mtaillex))
			mtaillex.(*parser).pos = tokenpos(mtaillex)
		}
	case 122:
		mtailDollar = mtailS[mtailpt-0 : mtailpt+1]
//line parser.y:701
		{
			mtaillex.(*parser).inRegex()
		}
	}
	goto mtailstack /* stack new state and value */
}
