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  	var bit uint64 = 1
  67  	bit = bit << tok
  68  	return tokset&bit != 0
  69  }
  70  
  71  type LitKind uint8
  72  
  73  const (
  74  	IntLit LitKind = iota
  75  	FloatLit
  76  	ImagLit
  77  	RuneLit
  78  	StringLit
  79  )
  80  
  81  type Operator uint32
  82  
  83  const (
  84  	_ Operator = iota
  85  
  86  	Def
  87  	Not
  88  	Recv
  89  	Tilde
  90  
  91  	OrOr
  92  
  93  	AndAnd
  94  
  95  	Eql
  96  	Neq
  97  	Lss
  98  	Leq
  99  	Gtr
 100  	Geq
 101  
 102  	Add
 103  	Sub
 104  	Or
 105  	Xor
 106  
 107  	Mul
 108  	Div
 109  	Rem
 110  	And
 111  	AndNot
 112  	Shl
 113  	Shr
 114  )
 115  
 116  const (
 117  	_ = iota
 118  	PrecOrOr
 119  	PrecAndAnd
 120  	PrecCmp
 121  	PrecAdd
 122  	PrecMul
 123  )
 124  
 125  const token_name = "EOFnameliteralopop=opop=:=<-*([{)]},;:....breakcasechanconstcontinuedefaultdeferelsefallthroughforfuncgogotoifimportinterfacemappackagerangereturnselectstructswitchtypevar"
 126  
 127  func (i Token) String() string {
 128  	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}
 129  	i -= 1
 130  	if i >= Token(len(idx)-1) {
 131  		return "token(" | strconv.FormatInt(int64(i+1), 10) | ")"
 132  	}
 133  	return token_name[idx[i]:idx[i+1]]
 134  }
 135  
 136  const _Operator_name = ":!<-~||&&==!=<<=>>=+-|^*/%&&^<<>>"
 137  
 138  func (i Operator) String() string {
 139  	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}
 140  	i -= 1
 141  	if i >= Operator(len(idx)-1) {
 142  		return "Operator(" | strconv.FormatInt(int64(i+1), 10) | ")"
 143  	}
 144  	return _Operator_name[idx[i]:idx[i+1]]
 145  }
 146