summaryrefslogtreecommitdiff
path: root/lang/spec.go
blob: c5b50a4a5238a2a75d162ae65bc2d927babbf64a (plain)
1
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
package lang

const (
	CharIllegal = 1 << iota
	CharOp
	CharNum
	CharAlpha
	CharSep
	CharLineSep
	CharGroupSep
	CharStr
	CharBlock
	StrEsc
	StrNonl
	ExcludeEnd  // exclude end delimiter from content
	EosValidEnd // end of input string terminates block or string token
)

const ASCIILen = 1 << 7 // 128

type TokenProp struct {
	TokenId
	SkipSemi bool // automatic semicolon insertion after newline
}

type Spec struct {
	CharProp   [ASCIILen]uint       // special Character properties
	End        map[string]string    // end delimiters, indexed by start
	BlockProp  map[string]uint      // block properties
	TokenProps map[string]TokenProp // token properties
	DotNum     bool                 // true if a number can start with '.'
	IdAscii    bool                 // true if an identifier can be in ASCII only
	Num_       bool                 // true if a number can contain _ character
}

// HasInit stores if a statement may contain a simple init statement
var HasInit = map[TokenId]bool{
	Case:   true,
	For:    true,
	If:     true,
	Select: true,
	Switch: true,
}