From 707337ca6e0f49fb79d9f22a70a4b80ea4603d19 Mon Sep 17 00:00:00 2001 From: Ruben Date: Mon, 16 Jan 2023 15:43:54 +0100 Subject: [PATCH] Added the beginning of the language --- src/lang.h | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/src/lang.h b/src/lang.h index 6548e7b..27d6752 100644 --- a/src/lang.h +++ b/src/lang.h @@ -11,4 +11,50 @@ namespace fs = std::filesystem; +enum class TokenType { + LEFT_PAREN, + RIGHT_PAREN, + COLONCOLON, + STRING, + INTRINSIC, + CONSTANT +}; +enum class Intrinsic { LET, UNLET, ENTER, EXIT, SHOW, HIDE }; +enum class Constant { Character, Location, Image }; + +struct Token { + TokenType type; + std::string value; +}; + +struct IntrinsicToken : Token { + Intrinsic intrinsic; +}; + +struct ConstantToken : Token { + Constant constant; +}; + +struct StringToken : Token { + std::string string; +}; + +std::map tokens = { + {"(", Token{TokenType::LEFT_PAREN, "("}}, + {")", Token{TokenType::RIGHT_PAREN, ")"}}, + {"::", Token{TokenType::COLONCOLON, "::"}}, + {"let", IntrinsicToken{TokenType::INTRINSIC, "let", Intrinsic::LET}}, + {"unlet", IntrinsicToken{TokenType::INTRINSIC, "unlet", Intrinsic::UNLET}}, + {"enter", IntrinsicToken{TokenType::INTRINSIC, "enter", Intrinsic::ENTER}}, + {"exit", IntrinsicToken{TokenType::INTRINSIC, "exit", Intrinsic::EXIT}}, + {"show", IntrinsicToken{TokenType::INTRINSIC, "show", Intrinsic::SHOW}}, + {"hide", IntrinsicToken{TokenType::INTRINSIC, "hide", Intrinsic::HIDE}}, + {"Character", + ConstantToken{TokenType::CONSTANT, "Character", Constant::Character}}, + {"Location", + ConstantToken{TokenType::CONSTANT, "Location", Constant::Location}}, + {"Image", ConstantToken{TokenType::CONSTANT, "Image", Constant::Image}}, +}; + int read_file(std::deque args); +int parse_line(std::istream stream);