summaryrefslogtreecommitdiffstats
path: root/source/slang/token-defs.h
diff options
context:
space:
mode:
authorTim Foley <tfoley@nvidia.com>2017-06-09 11:34:21 -0700
committerTim Foley <tfoley@nvidia.com>2017-06-09 13:44:59 -0700
commitfcf83dbf9effab3bd98bad2b83b2468b7eb05cfd (patch)
tree41047c94883b86ec085a81597391ce3ef557cd43 /source/slang/token-defs.h
parent52e8d4b9a27ab0060f874c3a63ab531847be35c0 (diff)
Initial import of code.
Diffstat (limited to 'source/slang/token-defs.h')
-rw-r--r--source/slang/token-defs.h93
1 files changed, 93 insertions, 0 deletions
diff --git a/source/slang/token-defs.h b/source/slang/token-defs.h
new file mode 100644
index 000000000..f29574bbb
--- /dev/null
+++ b/source/slang/token-defs.h
@@ -0,0 +1,93 @@
+// token-defs.h
+
+// This file is meant to be included multiple times, to produce different
+// pieces of code related to tokens
+//
+// Each token is declared here with:
+//
+// TOKEN(id, desc)
+//
+// where `id` is the identifier that will be used for the token in
+// ordinary code, while `desc` is name we should print when
+// referring to this token in diagnostic messages.
+
+
+#ifndef TOKEN
+#error Need to define TOKEN(ID, DESC) before including "token-defs.h"
+#endif
+
+TOKEN(Unknown, "<unknown>")
+TOKEN(EndOfFile, "end of file")
+TOKEN(EndOfDirective, "end of line")
+TOKEN(Invalid, "invalid character")
+TOKEN(Identifier, "identifier")
+TOKEN(IntLiterial, "integer literal")
+TOKEN(DoubleLiterial, "floating-point literal")
+TOKEN(StringLiterial, "string literal")
+TOKEN(CharLiterial, "character literal")
+TOKEN(WhiteSpace, "whitespace")
+TOKEN(NewLine, "newline")
+TOKEN(LineComment, "line comment")
+TOKEN(BlockComment, "block comment")
+
+#define PUNCTUATION(id, text) \
+ TOKEN(id, "'" text "'")
+
+PUNCTUATION(Semicolon, ";")
+PUNCTUATION(Comma, ",")
+PUNCTUATION(Dot, ".")
+
+PUNCTUATION(LBrace, "{")
+PUNCTUATION(RBrace, "}")
+PUNCTUATION(LBracket, "[")
+PUNCTUATION(RBracket, "]")
+PUNCTUATION(LParent, "(")
+PUNCTUATION(RParent, ")")
+
+PUNCTUATION(OpAssign, "=")
+PUNCTUATION(OpAdd, "+")
+PUNCTUATION(OpSub, "-")
+PUNCTUATION(OpMul, "*")
+PUNCTUATION(OpDiv, "/")
+PUNCTUATION(OpMod, "%")
+PUNCTUATION(OpNot, "!")
+PUNCTUATION(OpBitNot, "~")
+PUNCTUATION(OpLsh, "<<")
+PUNCTUATION(OpRsh, ">>")
+PUNCTUATION(OpEql, "==")
+PUNCTUATION(OpNeq, "!=")
+PUNCTUATION(OpGreater, ">")
+PUNCTUATION(OpLess, "<")
+PUNCTUATION(OpGeq, ">=")
+PUNCTUATION(OpLeq, "<=")
+PUNCTUATION(OpAnd, "&&")
+PUNCTUATION(OpOr, "||")
+PUNCTUATION(OpBitAnd, "&")
+PUNCTUATION(OpBitOr, "|")
+PUNCTUATION(OpBitXor, "^")
+PUNCTUATION(OpInc, "++")
+PUNCTUATION(OpDec, "--")
+
+PUNCTUATION(OpAddAssign, "+=")
+PUNCTUATION(OpSubAssign, "-=")
+PUNCTUATION(OpMulAssign, "*=")
+PUNCTUATION(OpDivAssign, "/=")
+PUNCTUATION(OpModAssign, "%=")
+PUNCTUATION(OpShlAssign, "<<=")
+PUNCTUATION(OpShrAssign, ">>=")
+PUNCTUATION(OpAndAssign, "&=")
+PUNCTUATION(OpOrAssign, "|=")
+PUNCTUATION(OpXorAssign, "^=")
+
+PUNCTUATION(QuestionMark, "?")
+PUNCTUATION(Colon, ":")
+PUNCTUATION(RightArrow, "->")
+PUNCTUATION(At, "@")
+PUNCTUATION(Dollar, "$")
+PUNCTUATION(Pound, "#")
+PUNCTUATION(PoundPound, "##")
+
+#undef PUNCTUATION
+
+// Un-define the `TOKEN` macro so that client doesn't have to
+#undef TOKEN