tokens.mx raw

   1  package main
   2  
   3  import "strconv"
   4  
   5  type Token uint32
   6  
   7  const (
   8  	_    Token = iota
   9  	EOF
  10  
  11  	NameType
  12  	Literal
  13  
  14  	OperatorType
  15  	AssignOp
  16  	IncOp
  17  	Assign
  18  	Define
  19  	Arrow
  20  	Star
  21  
  22  	Lparen
  23  	Lbrack
  24  	Lbrace
  25  	Rparen
  26  	Rbrack
  27  	Rbrace
  28  	Comma
  29  	Semi
  30  	Colon
  31  	Dot
  32  	DotDotDot
  33  
  34  	Break
  35  	Case
  36  	Chan
  37  	Const
  38  	Continue
  39  	Default
  40  	Defer
  41  	Else
  42  	Fallthrough
  43  	For
  44  	Func
  45  	Go
  46  	Goto
  47  	If
  48  	Import
  49  	Interface
  50  	Map
  51  	Package
  52  	Range
  53  	Return
  54  	Select
  55  	Struct
  56  	Switch
  57  	TypeType
  58  	Var
  59  
  60  	tokenCount
  61  )
  62  
  63  const _ uint64 = 1 << (tokenCount - 1)
  64  
  65  func contains(tokset uint64, tok Token) bool {
  66  	return tokset&(1<<tok) != 0
  67  }
  68  
  69  type LitKind uint8
  70  
  71  const (
  72  	IntLit LitKind = iota
  73  	FloatLit
  74  	ImagLit
  75  	RuneLit
  76  	StringLit
  77  )
  78  
  79  type Operator uint32
  80  
  81  const (
  82  	_ Operator = iota
  83  
  84  	Def
  85  	Not
  86  	Recv
  87  	Tilde
  88  
  89  	OrOr
  90  
  91  	AndAnd
  92  
  93  	Eql
  94  	Neq
  95  	Lss
  96  	Leq
  97  	Gtr
  98  	Geq
  99  
 100  	Add
 101  	Sub
 102  	Or
 103  	Xor
 104  
 105  	Mul
 106  	Div
 107  	Rem
 108  	And
 109  	AndNot
 110  	Shl
 111  	Shr
 112  )
 113  
 114  const (
 115  	_ = iota
 116  	PrecOrOr
 117  	PrecAndAnd
 118  	PrecCmp
 119  	PrecAdd
 120  	PrecMul
 121  )
 122  
 123  const token_name = "EOFnameliteralopop=opop=:=<-*([{)]},;:....breakcasechanconstcontinuedefaultdeferelsefallthroughforfuncgogotoifimportinterfacemappackagerangereturnselectstructswitchtypevar"
 124  
 125  func (i Token) String() string {
 126  	idx := [48]uint8{0, 3, 7, 14, 16, 19, 23, 24, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 42, 47, 51, 55, 60, 68, 75, 80, 84, 95, 98, 102, 104, 108, 110, 116, 125, 128, 135, 140, 146, 152, 158, 164, 168, 171, 171}
 127  	i -= 1
 128  	if i >= Token(len(idx)-1) {
 129  		return "token(" | strconv.FormatInt(int64(i+1), 10) | ")"
 130  	}
 131  	return token_name[idx[i]:idx[i+1]]
 132  }
 133  
 134  const _Operator_name = ":!<-~||&&==!=<<=>>=+-|^*/%&&^<<>>"
 135  
 136  func (i Operator) String() string {
 137  	idx := [24]uint8{0, 1, 2, 4, 5, 7, 9, 11, 13, 14, 16, 17, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 31, 33}
 138  	i -= 1
 139  	if i >= Operator(len(idx)-1) {
 140  		return "Operator(" | strconv.FormatInt(int64(i+1), 10) | ")"
 141  	}
 142  	return _Operator_name[idx[i]:idx[i+1]]
 143  }
 144