summaryrefslogtreecommitdiffstats
path: root/source/core/token-reader.h
diff options
context:
space:
mode:
authorjsmall-nvidia <jsmall@nvidia.com>2019-05-31 17:20:37 -0400
committerGitHub <noreply@github.com>2019-05-31 17:20:37 -0400
commit6cbc3929a54d37bd23cb5efa8e3320ba02f78b2f (patch)
tree5a23cb47782e9e2a77762c90dd35da1005eba8d0 /source/core/token-reader.h
parentb81ff3ef968d1cc4e954b31a1812b3c391d17b02 (diff)
Use slang- prefix on slang compiler and core source (#973)
* Prefixing source files in source/slang with slang- * Prefix source in source/slang with slang- prefix. * Rename core source files with slang- prefix. * Update project files. * Fix problems from automatic merge.
Diffstat (limited to 'source/core/token-reader.h')
-rw-r--r--source/core/token-reader.h258
1 files changed, 0 insertions, 258 deletions
diff --git a/source/core/token-reader.h b/source/core/token-reader.h
deleted file mode 100644
index a5b9b3694..000000000
--- a/source/core/token-reader.h
+++ /dev/null
@@ -1,258 +0,0 @@
-#ifndef CORE_TOKEN_READER_H
-#define CORE_TOKEN_READER_H
-
-#include "basic.h"
-
-namespace Slang
-{
- enum class TokenType
- {
- EndOfFile = -1,
- // illegal
- Unknown,
- // identifier
- Identifier,
- // constant
- IntLiteral, DoubleLiteral, StringLiteral, CharLiteral,
- // operators
- Semicolon, Comma, Dot, LBrace, RBrace, LBracket, RBracket, LParent, RParent,
- OpAssign, OpAdd, OpSub, OpMul, OpDiv, OpMod, OpNot, OpBitNot, OpLsh, OpRsh,
- OpEql, OpNeq, OpGreater, OpLess, OpGeq, OpLeq,
- OpAnd, OpOr, OpBitXor, OpBitAnd, OpBitOr,
- OpInc, OpDec, OpAddAssign, OpSubAssign, OpMulAssign, OpDivAssign, OpModAssign,
- OpShlAssign, OpShrAssign, OpOrAssign, OpAndAssign, OpXorAssign,
-
- QuestionMark, Colon, RightArrow, At, Pound, PoundPound, Scope,
- };
-
- class CodePosition
- {
- public:
- int Line = -1, Col = -1, Pos = -1;
- String FileName;
- String ToString()
- {
- StringBuilder sb(100);
- sb << FileName;
- if (Line != -1)
- sb << "(" << Line << ")";
- return sb.ProduceString();
- }
- CodePosition() = default;
- CodePosition(int line, int col, int pos, String fileName)
- {
- Line = line;
- Col = col;
- Pos = pos;
- this->FileName = fileName;
- }
- bool operator < (const CodePosition & pos) const
- {
- return FileName < pos.FileName || (FileName == pos.FileName && Line < pos.Line) ||
- (FileName == pos.FileName && Line == pos.Line && Col < pos.Col);
- }
- bool operator == (const CodePosition & pos) const
- {
- return FileName == pos.FileName && Line == pos.Line && Col == pos.Col;
- }
- };
-
- enum TokenFlag : unsigned int
- {
- AtStartOfLine = 1 << 0,
- AfterWhitespace = 1 << 1,
- };
- typedef unsigned int TokenFlags;
-
- class Token
- {
- public:
- TokenType Type = TokenType::Unknown;
- String Content;
- CodePosition Position;
- TokenFlags flags;
- Token() = default;
- Token(TokenType type, const String & content, int line, int col, int pos, String fileName, TokenFlags flags = 0)
- : flags(flags)
- {
- Type = type;
- Content = content;
- Position = CodePosition(line, col, pos, fileName);
- }
- };
-
- class TextFormatException : public Exception
- {
- public:
- TextFormatException(String message)
- : Exception(message)
- {}
- };
-
- class TokenReader
- {
- private:
- bool legal;
- List<Token> tokens;
- int tokenPtr;
- public:
- TokenReader(String text);
- int ReadInt()
- {
- auto token = ReadToken();
- bool neg = false;
- if (token.Content == '-')
- {
- neg = true;
- token = ReadToken();
- }
- if (token.Type == TokenType::IntLiteral)
- {
- if (neg)
- return -StringToInt(token.Content);
- else
- return StringToInt(token.Content);
- }
- throw TextFormatException("Text parsing error: int expected.");
- }
- unsigned int ReadUInt()
- {
- auto token = ReadToken();
- if (token.Type == TokenType::IntLiteral)
- {
- return StringToUInt(token.Content);
- }
- throw TextFormatException("Text parsing error: int expected.");
- }
- double ReadDouble()
- {
- auto token = ReadToken();
- bool neg = false;
- if (token.Content == '-')
- {
- neg = true;
- token = ReadToken();
- }
- if (token.Type == TokenType::DoubleLiteral || token.Type == TokenType::IntLiteral)
- {
- if (neg)
- return -StringToDouble(token.Content);
- else
- return StringToDouble(token.Content);
- }
- throw TextFormatException("Text parsing error: floating point value expected.");
- }
- float ReadFloat()
- {
- return (float)ReadDouble();
- }
- String ReadWord()
- {
- auto token = ReadToken();
- if (token.Type == TokenType::Identifier)
- {
- return token.Content;
- }
- throw TextFormatException("Text parsing error: identifier expected.");
- }
- String Read(const char * expectedStr)
- {
- auto token = ReadToken();
- if (token.Content == expectedStr)
- {
- return token.Content;
- }
- throw TextFormatException("Text parsing error: \'" + String(expectedStr) + "\' expected.");
- }
- String Read(String expectedStr)
- {
- auto token = ReadToken();
- if (token.Content == expectedStr)
- {
- return token.Content;
- }
- throw TextFormatException("Text parsing error: \'" + expectedStr + "\' expected.");
- }
-
- String ReadStringLiteral()
- {
- auto token = ReadToken();
- if (token.Type == TokenType::StringLiteral)
- {
- return token.Content;
- }
- throw TextFormatException("Text parsing error: string literal expected.");
- }
- void Back(int count)
- {
- tokenPtr -= count;
- }
- Token ReadToken()
- {
- if (tokenPtr < (int)tokens.getCount())
- {
- auto &rs = tokens[tokenPtr];
- tokenPtr++;
- return rs;
- }
- throw TextFormatException("Unexpected ending.");
- }
- Token NextToken(int offset = 0)
- {
- if (tokenPtr + offset < (int)tokens.getCount())
- return tokens[tokenPtr + offset];
- else
- {
- Token rs;
- rs.Type = TokenType::Unknown;
- return rs;
- }
- }
- bool LookAhead(String token)
- {
- if (tokenPtr < (int)tokens.getCount())
- {
- auto next = NextToken();
- return next.Content == token;
- }
- else
- {
- return false;
- }
- }
- bool IsEnd()
- {
- return tokenPtr == (int)tokens.getCount();
- }
- public:
- bool IsLegalText()
- {
- return legal;
- }
- };
-
- inline List<String> Split(String text, char c)
- {
- List<String> result;
- StringBuilder sb;
- for (Index i = 0; i < text.getLength(); i++)
- {
- if (text[i] == c)
- {
- auto str = sb.ToString();
- if (str.getLength() != 0)
- result.add(str);
- sb.Clear();
- }
- else
- sb << text[i];
- }
- auto lastStr = sb.ToString();
- if (lastStr.getLength())
- result.add(lastStr);
- return result;
- }
-}
-
-
-#endif