Introduce new tokens: $, | and ||

This commit is contained in:
2020-03-19 13:21:34 +01:00
parent 0fb7875403
commit 7b742f21da
3 changed files with 10 additions and 2 deletions

View File

@@ -4,6 +4,7 @@ enum class TokenType(val token: String) {
NONE("<NONE>"), NONE("<NONE>"),
RELATION("==, !=, >=, <="), RELATION("==, !=, >=, <="),
DOUBLE_ASTERISK("**"), DOUBLE_ASTERISK("**"),
DOUBLE_PIPE("||"),
OPEN_CURLY("{"), OPEN_CURLY("{"),
CLOSE_CURLY("}"), CLOSE_CURLY("}"),
OPEN_PAREN("("), OPEN_PAREN("("),
@@ -15,6 +16,7 @@ enum class TokenType(val token: String) {
SEMICOLON(";"), SEMICOLON(";"),
ASTERISK("*"), ASTERISK("*"),
PERCENT("%"), PERCENT("%"),
DOLLAR("$"),
ASSIGN("="), ASSIGN("="),
ARROW("->"), ARROW("->"),
COLON(":"), COLON(":"),
@@ -24,6 +26,7 @@ enum class TokenType(val token: String) {
PLUS("+"), PLUS("+"),
CARET("^"), CARET("^"),
DOTS("..."), DOTS("..."),
PIPE("|"),
AMP("&"), AMP("&"),
DOT("."), DOT("."),
AND("and"), AND("and"),

View File

@@ -21,6 +21,9 @@ class DefaultTokenizer : Tokenizer {
keywords(TokenType.RELATION, "==", "!=", "<=", ">="), keywords(TokenType.RELATION, "==", "!=", "<=", ">="),
default(TokenType.DOUBLE_ASTERISK), default(TokenType.DOUBLE_ASTERISK),
// Double-character tokens
default(TokenType.DOUBLE_PIPE),
// Characters // Characters
default(TokenType.OPEN_CURLY), default(TokenType.OPEN_CURLY),
default(TokenType.CLOSE_CURLY), default(TokenType.CLOSE_CURLY),
@@ -33,6 +36,7 @@ class DefaultTokenizer : Tokenizer {
default(TokenType.SEMICOLON), default(TokenType.SEMICOLON),
default(TokenType.ASTERISK), default(TokenType.ASTERISK),
default(TokenType.PERCENT), default(TokenType.PERCENT),
default(TokenType.DOLLAR),
default(TokenType.ASSIGN), default(TokenType.ASSIGN),
default(TokenType.COLON), default(TokenType.COLON),
default(TokenType.COMMA), default(TokenType.COMMA),
@@ -41,6 +45,7 @@ class DefaultTokenizer : Tokenizer {
default(TokenType.PLUS), default(TokenType.PLUS),
default(TokenType.CARET), default(TokenType.CARET),
default(TokenType.DOTS), default(TokenType.DOTS),
default(TokenType.PIPE),
default(TokenType.AMP), default(TokenType.AMP),
default(TokenType.DOT), default(TokenType.DOT),

View File

@@ -35,9 +35,9 @@ class DefaultInterpreter {
environment.loadModule("smnp.lang") environment.loadModule("smnp.lang")
val tokens = tokenizer.tokenize(lines, source) val tokens = tokenizer.tokenize(lines, source)
val ast = parser.parse(tokens)
if (printTokens) println(tokens) if (printTokens) println(tokens)
val ast = parser.parse(tokens)
if (printAst) ast.node.pretty() if (printAst) ast.node.pretty()
if (!dryRun) { if (!dryRun) {