aboutsummaryrefslogtreecommitdiff
path: root/spec/grammar/syntax_error.go
diff options
context:
space:
mode:
authorRyo Nihei <nihei.dev@gmail.com>2022-05-27 02:11:39 +0900
committerRyo Nihei <nihei.dev@gmail.com>2022-05-27 02:25:50 +0900
commit4c0f7eb15db566a19eb753e6ffc3a2354078f5fc (patch)
treef3956aa60561ede7d6ccfb288eabfd47de60ffe4 /spec/grammar/syntax_error.go
parentAllows a directory to be specified as the --output option for the vartan-comp... (diff)
downloadcotia-4c0f7eb15db566a19eb753e6ffc3a2354078f5fc.tar.gz
cotia-4c0f7eb15db566a19eb753e6ffc3a2354078f5fc.tar.xz
Rename spec package to spec/grammar package
Diffstat (limited to 'spec/grammar/syntax_error.go')
-rw-r--r--spec/grammar/syntax_error.go44
1 files changed, 44 insertions, 0 deletions
diff --git a/spec/grammar/syntax_error.go b/spec/grammar/syntax_error.go
new file mode 100644
index 0000000..1fec801
--- /dev/null
+++ b/spec/grammar/syntax_error.go
@@ -0,0 +1,44 @@
+package grammar
+
+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
+ synErrIDInvalidChar = newSyntaxError("an identifier can contain only the lower-case letter, the digits, and the underscore")
+ synErrIDInvalidUnderscorePos = newSyntaxError("the underscore cannot be placed at the beginning or end of an identifier")
+ synErrIDConsecutiveUnderscores = newSyntaxError("the underscore cannot be placed consecutively")
+ synErrIDInvalidDigitsPos = newSyntaxError("the digits cannot be placed at the biginning of an identifier")
+ 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")
+
+ // syntax errors
+ synErrInvalidToken = newSyntaxError("invalid token")
+ synErrTopLevelDirNoSemicolon = newSyntaxError("a top-level directive must be followed by ;")
+ 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")
+ synErrNoOrderedSymbolName = newSyntaxError("an ordered symbol name is missing")
+ synErrUnclosedDirGroup = newSyntaxError("a directive group must be closed by )")
+ synErrStrayExpOp = newSyntaxError("an expansion operator ... must be preceded by an identifier")
+ synErrInvalidExpOperand = newSyntaxError("an expansion operator ... can be applied to only an identifier")
+ synErrSemicolonNoNewline = newSyntaxError("a semicolon must be followed by a newline")
+ synErrFragmentNoPattern = newSyntaxError("a fragment needs one pattern element")
+)