Я пытаюсь создать высокопроизводительный DSL на основе S-Expression, скомпилированный C++/LLVM. Я написал для него небольшой лексер, но получаю бесконечный цикл для всех тестовых случаев, которые я проверяю, без ошибок (которые прекрасно улавливаются и обрабатываются). В чем может быть причина?
Я пытаюсь создать высокопроизводительный DSL на основе S-Expression, скомпилированный C++/LLVM. Я написал для него небольшой лексер, но получаю бесконечный цикл для всех тестовых случаев, которые я проверяю, без ошибок (которые прекрасно улавливаются и обрабатываются). В чем может быть причина? [code]#include #include #include #include
enum class TokenType { BLOCK, IF, LET, VAR, QUOTE, SET, LAMBDA, MACRO, INTEGER, FLOAT, STRING, BEGIN, END, SYMBOL, BUILTIN, TERMINATE };
// Handle (...) if (data == "(") return { TokenType::BEGIN, data }; if (data == ")") return { TokenType::END, data };
// Handle $ID if (data[0] == '$') return { TokenType::SYMBOL, data };
// String/Number/Comment handling are not relevant
// Handle special operators if (data == "block") return { TokenType::BLOCK, data }; if (data == "if") return { TokenType::IF, data }; if (data == "let") return { TokenType::LET, data }; if (data == "var") return { TokenType::VAR, data }; if (data == "quote") return { TokenType::QUOTE, data }; if (data == "set") return { TokenType::SET, data }; if (data == "lambda") return { TokenType::LAMBDA, data }; if (data == "macro") return { TokenType::MACRO, data };