aboutsummaryrefslogtreecommitdiff
path: root/spec/syntax_error.go
blob: 741d578cd70430a2de9a788df251348bd2ca7db3 (plain) (blame)
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
package spec

type SyntaxError struct {
	message string
}

func newSyntaxError(message string) *SyntaxError {
	return &SyntaxError{
		message: message,
	}
}

func (e *SyntaxError) Error() string {
	return e.message
}

var (
	// lexical errors
	synErrAutoGenID         = newSyntaxError("you cannot define an identifier beginning with an underscore")
	synErrUnclosedTerminal  = newSyntaxError("unclosed terminal")
	synErrUnclosedString    = newSyntaxError("unclosed string")
	synErrIncompletedEscSeq = newSyntaxError("incompleted escape sequence; unexpected EOF following a backslash")
	synErrEmptyPattern      = newSyntaxError("a pattern must include at least one character")
	synErrEmptyString       = newSyntaxError("a string must include at least one character")
	synErrZeroPos           = newSyntaxError("a position must be greater than or equal to 1")

	// syntax errors
	synErrInvalidToken       = newSyntaxError("invalid token")
	synErrNoProductionName   = newSyntaxError("a production name is missing")
	synErrNoColon            = newSyntaxError("the colon must precede alternatives")
	synErrNoSemicolon        = newSyntaxError("the semicolon is missing at the last of an alternative")
	synErrLabelWithNoSymbol  = newSyntaxError("a label must follow a symbol")
	synErrNoLabel            = newSyntaxError("an identifier that represents a label is missing after the label marker @")
	synErrNoDirectiveName    = newSyntaxError("a directive needs a name")
	synErrProdDirNoNewline   = newSyntaxError("a production directive must be followed by a newline")
	synErrSemicolonNoNewline = newSyntaxError("a semicolon must be followed by a newline")
	synErrFragmentNoPattern  = newSyntaxError("a fragment needs one pattern element")
)