diff options
author | Ryo Nihei <nihei.dev@gmail.com> | 2022-05-27 02:11:39 +0900 |
---|---|---|
committer | Ryo Nihei <nihei.dev@gmail.com> | 2022-05-27 02:25:50 +0900 |
commit | 4c0f7eb15db566a19eb753e6ffc3a2354078f5fc (patch) | |
tree | f3956aa60561ede7d6ccfb288eabfd47de60ffe4 /spec/grammar/syntax_error.go | |
parent | Allows a directory to be specified as the --output option for the vartan-comp... (diff) | |
download | cotia-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.go | 44 |
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") +) |