Files
highground-fork/src/lexer/lexer.sols

97 lines
2.7 KiB
Plaintext

use collections
use string
//
// Token type enum.
//
// Each token can be one of these types.
//
enum SolsToken {
Identifier, Literal, Type,
Dot, OpenCurly, CloseCurly, OpenParen, CloseParen, Comma,
OpAdd, OpSub, OpMul, OpDiv, OpAddTo, OpSubTo, OpMulTo, OpDivTo, OpIncrement, OpDecrement, OpSet,
OpGreater, OpLesser, OpEqual, OpInequal, OpEqGreater, OpEqLesser,
KwDef, KwLambda, KwReturn, KwUse, KwStruct, KwEnum, KwConstructor,
KwDestructor, KwDuplicator, KwPrivate, KwProtected, KwPuts, KwIf,
KwWhile, KwNew, KwGround,
LineEnd,
}
//
// Token type map.
//
// If a token matches one of the strings in this hashmap,
// its type gets set to the token type for that string.
//
KEYWORDS = Hashmap()
KEYWORDS.set("puts", SolsToken.KwPuts)
KEYWORDS.set("if", SolsToken.KwIf)
KEYWORDS.set("while", SolsToken.KwWhile)
KEYWORDS.set("def", SolsToken.KwDef)
KEYWORDS.set("lambda", SolsToken.KwLambda)
KEYWORDS.set("return", SolsToken.KwReturn)
KEYWORDS.set("use", SolsToken.KwUse)
KEYWORDS.set("struct", SolsToken.KwStruct)
KEYWORDS.set("enum", SolsToken.KwEnum)
KEYWORDS.set("constructor", SolsToken.KwConstructor)
KEYWORDS.set("destructor", SolsToken.KwDestructor)
KEYWORDS.set("duplicator", SolsToken.KwDuplicator)
KEYWORDS.set("private", SolsToken.KwPrivate)
KEYWORDS.set("protected", SolsToken.KwProtected)
KEYWORDS.set("ground", SolsToken.KwGround)
KEYWORDS.set("new", SolsToken.KwNew)
KEYWORDS.set("{", SolsToken.OpenCurly)
KEYWORDS.set("}", SolsToken.CloseCurly)
KEYWORDS.set("(", SolsToken.OpenParen)
KEYWORDS.set(")", SolsToken.CloseParen)
KEYWORDS.set("+", SolsToken.OpAdd)
KEYWORDS.set("-", SolsToken.OpSub)
KEYWORDS.set("*", SolsToken.OpMul)
KEYWORDS.set("/", SolsToken.OpDiv)
KEYWORDS.set("=", SolsToken.OpSet)
KEYWORDS.set("+=", SolsToken.OpAddTo)
KEYWORDS.set("-=", SolsToken.OpSubTo)
KEYWORDS.set("*=", SolsToken.OpMulTo)
KEYWORDS.set("/=", SolsToken.OpDivTo)
KEYWORDS.set("++", SolsToken.OpIncrement)
KEYWORDS.set("--", SolsToken.OpDecrement)
KEYWORDS.set("==", SolsToken.OpEqual)
KEYWORDS.set("!=", SolsToken.OpInequal)
KEYWORDS.set(">", SolsToken.OpGreater)
KEYWORDS.set("<", SolsToken.OpLesser)
KEYWORDS.set(">=", SolsToken.OpEqGreater)
KEYWORDS.set("<=", SolsToken.OpEqLesser)
KEYWORDS.set("\n", SolsToken.LineEnd)
KEYWORDS.set(";", SolsToken.LineEnd)
KEYWORDS.set(",", SolsToken.Comma)
struct SolsLexer {
sourceCode = "x = 123"
current = 0
private def getTokenType(string input) SolsToken {
return KEYWORDS.get(input)
}
def lex() {
inString = false
lineNum = 1
lineStart = 0
currentLine = ""
while lineStart < string_Length() {
}
}
}
lexer = new SolsLexer
puts lexer.getTokenType("if")