github.com/cilki/sh@v2.6.4+incompatible/syntax/tokens.go (about)

     1  // Copyright (c) 2016, Daniel Martí <mvdan@mvdan.cc>
     2  // See LICENSE for licensing information
     3  
     4  package syntax
     5  
     6  //go:generate stringer -type token -linecomment -trimprefix _
     7  
     8  type token uint32
     9  
    10  // The list of all possible tokens.
    11  const (
    12  	illegalTok token = iota
    13  
    14  	_EOF
    15  	_Newl
    16  	_Lit
    17  	_LitWord
    18  	_LitRedir
    19  
    20  	sglQuote // '
    21  	dblQuote // "
    22  	bckQuote // `
    23  
    24  	and    // &
    25  	andAnd // &&
    26  	orOr   // ||
    27  	or     // |
    28  	orAnd  // |&
    29  
    30  	dollar       // $
    31  	dollSglQuote // $'
    32  	dollDblQuote // $"
    33  	dollBrace    // ${
    34  	dollBrack    // $[
    35  	dollParen    // $(
    36  	dollDblParen // $((
    37  	leftBrack    // [
    38  	dblLeftBrack // [[
    39  	leftParen    // (
    40  	dblLeftParen // ((
    41  
    42  	rightBrace    // }
    43  	rightBrack    // ]
    44  	rightParen    // )
    45  	dblRightParen // ))
    46  	semicolon     // ;
    47  
    48  	dblSemicolon // ;;
    49  	semiAnd      // ;&
    50  	dblSemiAnd   // ;;&
    51  	semiOr       // ;|
    52  
    53  	exclMark // !
    54  	addAdd   // ++
    55  	subSub   // --
    56  	star     // *
    57  	power    // **
    58  	equal    // ==
    59  	nequal   // !=
    60  	lequal   // <=
    61  	gequal   // >=
    62  
    63  	addAssgn // +=
    64  	subAssgn // -=
    65  	mulAssgn // *=
    66  	quoAssgn // /=
    67  	remAssgn // %=
    68  	andAssgn // &=
    69  	orAssgn  // |=
    70  	xorAssgn // ^=
    71  	shlAssgn // <<=
    72  	shrAssgn // >>=
    73  
    74  	rdrOut   // >
    75  	appOut   // >>
    76  	rdrIn    // <
    77  	rdrInOut // <>
    78  	dplIn    // <&
    79  	dplOut   // >&
    80  	clbOut   // >|
    81  	hdoc     // <<
    82  	dashHdoc // <<-
    83  	wordHdoc // <<<
    84  	rdrAll   // &>
    85  	appAll   // &>>
    86  
    87  	cmdIn  // <(
    88  	cmdOut // >(
    89  
    90  	plus     // +
    91  	colPlus  // :+
    92  	minus    // -
    93  	colMinus // :-
    94  	quest    // ?
    95  	colQuest // :?
    96  	assgn    // =
    97  	colAssgn // :=
    98  	perc     // %
    99  	dblPerc  // %%
   100  	hash     // #
   101  	dblHash  // ##
   102  	caret    // ^
   103  	dblCaret // ^^
   104  	comma    // ,
   105  	dblComma // ,,
   106  	at       // @
   107  	slash    // /
   108  	dblSlash // //
   109  	colon    // :
   110  
   111  	tsExists  // -e
   112  	tsRegFile // -f
   113  	tsDirect  // -d
   114  	tsCharSp  // -c
   115  	tsBlckSp  // -b
   116  	tsNmPipe  // -p
   117  	tsSocket  // -S
   118  	tsSmbLink // -L
   119  	tsSticky  // -k
   120  	tsGIDSet  // -g
   121  	tsUIDSet  // -u
   122  	tsGrpOwn  // -G
   123  	tsUsrOwn  // -O
   124  	tsModif   // -N
   125  	tsRead    // -r
   126  	tsWrite   // -w
   127  	tsExec    // -x
   128  	tsNoEmpty // -s
   129  	tsFdTerm  // -t
   130  	tsEmpStr  // -z
   131  	tsNempStr // -n
   132  	tsOptSet  // -o
   133  	tsVarSet  // -v
   134  	tsRefVar  // -R
   135  
   136  	tsReMatch // =~
   137  	tsNewer   // -nt
   138  	tsOlder   // -ot
   139  	tsDevIno  // -ef
   140  	tsEql     // -eq
   141  	tsNeq     // -ne
   142  	tsLeq     // -le
   143  	tsGeq     // -ge
   144  	tsLss     // -lt
   145  	tsGtr     // -gt
   146  
   147  	globQuest // ?(
   148  	globStar  // *(
   149  	globPlus  // +(
   150  	globAt    // @(
   151  	globExcl  // !(
   152  )
   153  
   154  type RedirOperator token
   155  
   156  const (
   157  	RdrOut = RedirOperator(rdrOut) + iota
   158  	AppOut
   159  	RdrIn
   160  	RdrInOut
   161  	DplIn
   162  	DplOut
   163  	ClbOut
   164  	Hdoc
   165  	DashHdoc
   166  	WordHdoc
   167  	RdrAll
   168  	AppAll
   169  )
   170  
   171  type ProcOperator token
   172  
   173  const (
   174  	CmdIn = ProcOperator(cmdIn) + iota
   175  	CmdOut
   176  )
   177  
   178  type GlobOperator token
   179  
   180  const (
   181  	GlobQuest = GlobOperator(globQuest) + iota
   182  	GlobStar
   183  	GlobPlus
   184  	GlobAt
   185  	GlobExcl
   186  )
   187  
   188  type BinCmdOperator token
   189  
   190  const (
   191  	AndStmt = BinCmdOperator(andAnd) + iota
   192  	OrStmt
   193  	Pipe
   194  	PipeAll
   195  )
   196  
   197  type CaseOperator token
   198  
   199  const (
   200  	Break = CaseOperator(dblSemicolon) + iota
   201  	Fallthrough
   202  	Resume
   203  	ResumeKorn
   204  )
   205  
   206  type ParNamesOperator token
   207  
   208  const (
   209  	NamesPrefix      = ParNamesOperator(star)
   210  	NamesPrefixWords = ParNamesOperator(at)
   211  )
   212  
   213  type ParExpOperator token
   214  
   215  const (
   216  	SubstPlus = ParExpOperator(plus) + iota
   217  	SubstColPlus
   218  	SubstMinus
   219  	SubstColMinus
   220  	SubstQuest
   221  	SubstColQuest
   222  	SubstAssgn
   223  	SubstColAssgn
   224  	RemSmallSuffix
   225  	RemLargeSuffix
   226  	RemSmallPrefix
   227  	RemLargePrefix
   228  	UpperFirst
   229  	UpperAll
   230  	LowerFirst
   231  	LowerAll
   232  	OtherParamOps
   233  )
   234  
   235  type UnAritOperator token
   236  
   237  const (
   238  	Not = UnAritOperator(exclMark) + iota
   239  	Inc
   240  	Dec
   241  	Plus  = UnAritOperator(plus)
   242  	Minus = UnAritOperator(minus)
   243  )
   244  
   245  type BinAritOperator token
   246  
   247  const (
   248  	Add = BinAritOperator(plus)
   249  	Sub = BinAritOperator(minus)
   250  	Mul = BinAritOperator(star)
   251  	Quo = BinAritOperator(slash)
   252  	Rem = BinAritOperator(perc)
   253  	Pow = BinAritOperator(power)
   254  	Eql = BinAritOperator(equal)
   255  	Gtr = BinAritOperator(rdrOut)
   256  	Lss = BinAritOperator(rdrIn)
   257  	Neq = BinAritOperator(nequal)
   258  	Leq = BinAritOperator(lequal)
   259  	Geq = BinAritOperator(gequal)
   260  	And = BinAritOperator(and)
   261  	Or  = BinAritOperator(or)
   262  	Xor = BinAritOperator(caret)
   263  	Shr = BinAritOperator(appOut)
   264  	Shl = BinAritOperator(hdoc)
   265  
   266  	AndArit = BinAritOperator(andAnd)
   267  	OrArit  = BinAritOperator(orOr)
   268  	Comma   = BinAritOperator(comma)
   269  	Quest   = BinAritOperator(quest)
   270  	Colon   = BinAritOperator(colon)
   271  
   272  	Assgn    = BinAritOperator(assgn)
   273  	AddAssgn = BinAritOperator(addAssgn)
   274  	SubAssgn = BinAritOperator(subAssgn)
   275  	MulAssgn = BinAritOperator(mulAssgn)
   276  	QuoAssgn = BinAritOperator(quoAssgn)
   277  	RemAssgn = BinAritOperator(remAssgn)
   278  	AndAssgn = BinAritOperator(andAssgn)
   279  	OrAssgn  = BinAritOperator(orAssgn)
   280  	XorAssgn = BinAritOperator(xorAssgn)
   281  	ShlAssgn = BinAritOperator(shlAssgn)
   282  	ShrAssgn = BinAritOperator(shrAssgn)
   283  )
   284  
   285  type UnTestOperator token
   286  
   287  const (
   288  	TsExists = UnTestOperator(tsExists) + iota
   289  	TsRegFile
   290  	TsDirect
   291  	TsCharSp
   292  	TsBlckSp
   293  	TsNmPipe
   294  	TsSocket
   295  	TsSmbLink
   296  	TsSticky
   297  	TsGIDSet
   298  	TsUIDSet
   299  	TsGrpOwn
   300  	TsUsrOwn
   301  	TsModif
   302  	TsRead
   303  	TsWrite
   304  	TsExec
   305  	TsNoEmpty
   306  	TsFdTerm
   307  	TsEmpStr
   308  	TsNempStr
   309  	TsOptSet
   310  	TsVarSet
   311  	TsRefVar
   312  	TsNot = UnTestOperator(exclMark)
   313  )
   314  
   315  type BinTestOperator token
   316  
   317  const (
   318  	TsReMatch = BinTestOperator(tsReMatch) + iota
   319  	TsNewer
   320  	TsOlder
   321  	TsDevIno
   322  	TsEql
   323  	TsNeq
   324  	TsLeq
   325  	TsGeq
   326  	TsLss
   327  	TsGtr
   328  	AndTest   = BinTestOperator(andAnd)
   329  	OrTest    = BinTestOperator(orOr)
   330  	TsMatch   = BinTestOperator(equal)
   331  	TsNoMatch = BinTestOperator(nequal)
   332  	TsBefore  = BinTestOperator(rdrIn)
   333  	TsAfter   = BinTestOperator(rdrOut)
   334  )
   335  
   336  func (o RedirOperator) String() string    { return token(o).String() }
   337  func (o ProcOperator) String() string     { return token(o).String() }
   338  func (o GlobOperator) String() string     { return token(o).String() }
   339  func (o BinCmdOperator) String() string   { return token(o).String() }
   340  func (o CaseOperator) String() string     { return token(o).String() }
   341  func (o ParNamesOperator) String() string { return token(o).String() }
   342  func (o ParExpOperator) String() string   { return token(o).String() }
   343  func (o UnAritOperator) String() string   { return token(o).String() }
   344  func (o BinAritOperator) String() string  { return token(o).String() }
   345  func (o UnTestOperator) String() string   { return token(o).String() }
   346  func (o BinTestOperator) String() string  { return token(o).String() }