summaryrefslogtreecommitdiff
path: root/thirdparty/embree-aarch64/common/lexers/tokenstream.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'thirdparty/embree-aarch64/common/lexers/tokenstream.cpp')
-rw-r--r--thirdparty/embree-aarch64/common/lexers/tokenstream.cpp181
1 files changed, 0 insertions, 181 deletions
diff --git a/thirdparty/embree-aarch64/common/lexers/tokenstream.cpp b/thirdparty/embree-aarch64/common/lexers/tokenstream.cpp
deleted file mode 100644
index d05be65862..0000000000
--- a/thirdparty/embree-aarch64/common/lexers/tokenstream.cpp
+++ /dev/null
@@ -1,181 +0,0 @@
-// Copyright 2009-2020 Intel Corporation
-// SPDX-License-Identifier: Apache-2.0
-
-#include "tokenstream.h"
-#include "../math/math.h"
-
-namespace embree
-{
- /* shorthands for common sets of characters */
- const std::string TokenStream::alpha = "abcdefghijklmnopqrstuvwxyz";
- const std::string TokenStream::ALPHA = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
- const std::string TokenStream::numbers = "0123456789";
- const std::string TokenStream::separators = "\n\t\r ";
- const std::string TokenStream::stringChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 _.,+-=:/*\\";
-
- /* creates map for fast categorization of characters */
- static void createCharMap(bool map[256], const std::string& chrs) {
- for (size_t i=0; i<256; i++) map[i] = false;
- for (size_t i=0; i<chrs.size(); i++) map[uint8_t(chrs[i])] = true;
- }
-
- /* build full tokenizer that takes list of valid characters and keywords */
- TokenStream::TokenStream(const Ref<Stream<int> >& cin, //< stream to read from
- const std::string& alpha, //< valid characters for identifiers
- const std::string& seps, //< characters that act as separators
- const std::vector<std::string>& symbols) //< symbols
- : cin(cin), symbols(symbols)
- {
- createCharMap(isAlphaMap,alpha);
- createCharMap(isSepMap,seps);
- createCharMap(isStringCharMap,stringChars);
- }
-
- bool TokenStream::decDigits(std::string& str_o)
- {
- bool ok = false;
- std::string str;
- if (cin->peek() == '+' || cin->peek() == '-') str += (char)cin->get();
- while (isDigit(cin->peek())) { ok = true; str += (char)cin->get(); }
- if (ok) str_o += str;
- else cin->unget(str.size());
- return ok;
- }
-
- bool TokenStream::decDigits1(std::string& str_o)
- {
- bool ok = false;
- std::string str;
- while (isDigit(cin->peek())) { ok = true; str += (char)cin->get(); }
- if (ok) str_o += str; else cin->unget(str.size());
- return ok;
- }
-
- bool TokenStream::trySymbol(const std::string& symbol)
- {
- size_t pos = 0;
- while (pos < symbol.size()) {
- if (symbol[pos] != cin->peek()) { cin->unget(pos); return false; }
- cin->drop(); pos++;
- }
- return true;
- }
-
- bool TokenStream::trySymbols(Token& token, const ParseLocation& loc)
- {
- for (size_t i=0; i<symbols.size(); i++) {
- if (!trySymbol(symbols[i])) continue;
- token = Token(symbols[i],Token::TY_SYMBOL,loc);
- return true;
- }
- return false;
- }
-
- bool TokenStream::tryFloat(Token& token, const ParseLocation& loc)
- {
- bool ok = false;
- std::string str;
- if (trySymbol("nan")) {
- token = Token(float(nan));
- return true;
- }
- if (trySymbol("+inf")) {
- token = Token(float(pos_inf));
- return true;
- }
- if (trySymbol("-inf")) {
- token = Token(float(neg_inf));
- return true;
- }
-
- if (decDigits(str))
- {
- if (cin->peek() == '.') {
- str += (char)cin->get();
- decDigits(str);
- if (cin->peek() == 'e' || cin->peek() == 'E') {
- str += (char)cin->get();
- if (decDigits(str)) ok = true; // 1.[2]E2
- }
- else ok = true; // 1.[2]
- }
- else if (cin->peek() == 'e' || cin->peek() == 'E') {
- str += (char)cin->get();
- if (decDigits(str)) ok = true; // 1E2
- }
- }
- else
- {
- if (cin->peek() == '.') {
- str += (char)cin->get();
- if (decDigits(str)) {
- if (cin->peek() == 'e' || cin->peek() == 'E') {
- str += (char)cin->get();
- if (decDigits(str)) ok = true; // .3E2
- }
- else ok = true; // .3
- }
- }
- }
- if (ok) {
- token = Token((float)atof(str.c_str()),loc);
- }
- else cin->unget(str.size());
- return ok;
- }
-
- bool TokenStream::tryInt(Token& token, const ParseLocation& loc) {
- std::string str;
- if (decDigits(str)) {
- token = Token(atoi(str.c_str()),loc);
- return true;
- }
- return false;
- }
-
- bool TokenStream::tryString(Token& token, const ParseLocation& loc)
- {
- std::string str;
- if (cin->peek() != '\"') return false;
- cin->drop();
- while (cin->peek() != '\"') {
- const int c = cin->get();
- if (!isStringChar(c)) THROW_RUNTIME_ERROR("invalid string character "+std::string(1,c)+" at "+loc.str());
- str += (char)c;
- }
- cin->drop();
- token = Token(str,Token::TY_STRING,loc);
- return true;
- }
-
- bool TokenStream::tryIdentifier(Token& token, const ParseLocation& loc)
- {
- std::string str;
- if (!isAlpha(cin->peek())) return false;
- str += (char)cin->get();
- while (isAlphaNum(cin->peek())) str += (char)cin->get();
- token = Token(str,Token::TY_IDENTIFIER,loc);
- return true;
- }
-
- void TokenStream::skipSeparators()
- {
- /* skip separators */
- while (cin->peek() != EOF && isSeparator(cin->peek()))
- cin->drop();
- }
-
- Token TokenStream::next()
- {
- Token token;
- skipSeparators();
- ParseLocation loc = cin->loc();
- if (trySymbols (token,loc)) return token; /**< try to parse a symbol */
- if (tryFloat (token,loc)) return token; /**< try to parse float */
- if (tryInt (token,loc)) return token; /**< try to parse integer */
- if (tryString (token,loc)) return token; /**< try to parse string */
- if (tryIdentifier(token,loc)) return token; /**< try to parse identifier */
- if (cin->peek() == EOF ) return Token(loc); /**< return EOF token */
- return Token((char)cin->get(),loc); /**< return invalid character token */
- }
-}