erick-alcachofa b99f3586dc
chore(license): Added NOTICE header to all source files
Signed-off-by: erick-alcachofa <erick@artichoke.dev>
2025-12-25 13:12:41 -06:00

139 lines
4.9 KiB
C++

//============================================================================//
// //
// artichoke programming language //
// //
// Copyright (C) 2025 Erick Saul Guzman Ramos, whoami.artichoke.dev //
// //
// //
// This program is free software: you can redistribute it and/or modify //
// it under the terms of the GNU Affero General Public License as published //
// by the Free Software Foundation, either version 3 of the License, or //
// (at your option) any later version. //
// //
// This program is distributed in the hope that it will be useful, //
// but WITHOUT ANY WARRANTY; without even the implied warranty of //
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
// GNU Affero General Public License for more details. //
// //
// You should have received a copy of the GNU Affero General Public License //
// along with this program. If not, see <https://www.gnu.org/licenses/>. //
// //
//============================================================================//
#pragma once
#include <string>
namespace arti::lang {
enum class TokenV;
struct Token {
TokenV value;
std::size_t line;
std::size_t column;
std::string_view strValue;
};
enum class TokenV {
tkEOF,
tkString,
tkDecimal,
tkInteger,
tkCharacter,
tkIdentifier,
opDot, /* . */
opMod, /* % */
opPlus, /* + */
opHyphen, /* - */
opSlash, /* / */
opBang, /* ! */
opStar, /* * */
opColon, /* : */
opComma, /* , */
opAssign, /* = */
opAccess, /* :: */
opSemicolon, /* ; */
opCaret, /* ^ */
opTilde, /* ~ */
opEq, /* == */
opNeq, /* != */
opLt, /* < */
opGt, /* > */
opLtEq, /* <= */
opGtEq, /* >= */
opLShift, /* << */
opRShift, /* >> */
opBoolAnd, /* && */
opBoolOr, /* || */
opAnd, /* & */
opOr, /* | */
opLParen, /* ( */
opRParen, /* ) */
opLBracket, /* [ */
opRBracket, /* ] */
opLSquirly, /* { */
opRSquirly, /* } */
opArrow, /* -> */
opPlusAssign, /* += */
opHyphenAssign, /* -= */
opStarAssign, /* *= */
opSlashAssign, /* /= */
opModAssign, /* %= */
opAndAssign, /* &= */
opOrAssign, /* |= */
opLShiftAssign, /* <<= */
opRShiftAssign, /* >>= */
opBoolAndAssign, /* &&= */
opBoolOrAssign, /* ||= */
opMut, /* $ */
opOpt, /* ? */
opSliceSize, /* .# */
opPtrSlice, /* .[ */
opSlicePtr, /* .* */
opReflect, /* .@ */
opLabel, /* := */
/* Keywords */
kwUnderscore, /* _ */
kwOr, /* or */
kwNot, /* not */
kwAnd, /* and */
kwIf, /* if */
kwElse, /* else */
kwFn, /* fn */
kwEnum, /* enum */
kwStruct, /* struct */
kwDef, /* def */
kwLet, /* let */
kwFor, /* for */
kwLoop, /* loop */
kwBreak, /* break */
kwContinue, /* continue */
kwDo, /* do */
kwWhile, /* while */
kwMatch, /* match */
kwSwitch, /* switch */
kwReturn, /* return */
kwUnreachable, /* unreachable */
kwTypename, /* typename */
kwDefer, /* defer */
kwErrDefer, /* errdefer */
kwTrue, /* true */
kwFalse, /* false */
kwNull, /* null */
kwThis, /* this */
kwImport, /* import */
kwExport, /* export */
kwModule, /* module */
kwUsing, /* using */
};
std::string toString(const Token &value);
std::string_view toString(const TokenV &value);
} // namespace arti::lang