Skip to content

Commit e6dbbbf

Browse files
flatten token
1 parent 6396835 commit e6dbbbf

File tree

2 files changed

+28
-37
lines changed

2 files changed

+28
-37
lines changed

core/src/main/kotlin/io/github/cybercodernaj/parkour/lexer/Token.kt

Lines changed: 16 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -8,28 +8,19 @@ import io.github.cybercodernaj.parkour.utils.Position
88
* @author Nishant Aanjaney Jalan
99
* @since 0.1.0
1010
*/
11-
internal sealed class Token(open val value: Any?, open val start: Position?, open val end: Position?) {
12-
class Identifier(override val value: String, start: Position, end: Position) : Token(value, start, end)
13-
14-
class Keyword(override val value: String, start: Position, end: Position, val soft: Boolean = false) : Token(value, start, end)
15-
16-
class Operator(override val value: String, start: Position, end: Position) : Token(value, start, end)
17-
18-
class Separator(override val value: String, start: Position, end: Position) : Token(value, start, end)
19-
20-
sealed class Literal(
21-
override val value: Any,
22-
override val start: Position,
23-
override val end: Position
24-
) : Token(value, start, end) {
25-
class IntLiteral(override val value: Long, start: Position, end: Position) : Literal(value, start, end)
26-
class FloatLiteral(override val value: Double, start: Position, end: Position) : Literal(value, start, end)
27-
class StringLiteral(override val value: String, start: Position, end: Position) : Literal(value, start, end)
28-
class CharacterLiteral(override val value: Char, start: Position, end: Position) : Literal(value, start, end)
29-
class BooleanLiteral(override val value: Boolean, start: Position, end: Position) : Literal(value, start, end)
30-
}
31-
32-
data object EOF : Token(null, null, null)
11+
internal sealed class Token(val value: Any, val start: Position, val end: Position) {
12+
class Identifier(value: String, start: Position, end: Position) : Token(value, start, end)
13+
class Keyword(value: String, start: Position, end: Position, val soft: Boolean = false) :
14+
Token(value, start, end)
15+
class Operator(value: String, start: Position, end: Position) : Token(value, start, end)
16+
class Separator(value: String, start: Position, end: Position) : Token(value, start, end)
17+
class IntLiteral(value: Long, start: Position, end: Position) : Token(value, start, end)
18+
class FloatLiteral(value: Double, start: Position, end: Position) : Token(value, start, end)
19+
class StringLiteral(value: String, start: Position, end: Position) : Token(value, start, end)
20+
class CharacterLiteral(value: Char, start: Position, end: Position) : Token(value, start, end)
21+
class BooleanLiteral(value: Boolean, start: Position, end: Position) : Token(value, start, end)
22+
23+
data object EOF : Token(Any(), Position(-1, -1), Position(-1, -1))
3324

3425
override fun equals(other: Any?): Boolean {
3526
if (this === other) return true
@@ -43,9 +34,9 @@ internal sealed class Token(open val value: Any?, open val start: Position?, ope
4334
}
4435

4536
override fun hashCode(): Int {
46-
var result = value?.hashCode() ?: 0
47-
result = 31 * result + (start?.hashCode() ?: 0)
48-
result = 31 * result + (end?.hashCode() ?: 0)
37+
var result = value.hashCode()
38+
result = 31 * result + start.hashCode()
39+
result = 31 * result + end.hashCode()
4940
return result
5041
}
5142

core/src/test/kotlin/io/github/cybercodernaj/parkour/lexer/LexerLiteralTest.kt

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -26,39 +26,39 @@ class LexerLiteralTest {
2626
lexer.source = StringSource("12345")
2727

2828
val token = lexer.nextToken()
29-
assertEquals(Token.Literal.IntLiteral(12345L, Position(0, 0), Position(0, 4)), token)
29+
assertEquals(Token.IntLiteral(12345L, Position(0, 0), Position(0, 4)), token)
3030
}
3131

3232
@Test
3333
fun `returns a negative int number`() {
3434
lexer.source = StringSource("-12345")
3535

3636
val token = lexer.nextToken()
37-
assertEquals(Token.Literal.IntLiteral(-12345L, Position(0, 0), Position(0, 5)), token)
37+
assertEquals(Token.IntLiteral(-12345L, Position(0, 0), Position(0, 5)), token)
3838
}
3939

4040
@Test
4141
fun `returns an int number with underscores`() {
4242
lexer.source = StringSource("3_00_000")
4343

4444
val token = lexer.nextToken()
45-
assertEquals(Token.Literal.IntLiteral(300000L, Position(0, 0), Position(0, 7)), token)
45+
assertEquals(Token.IntLiteral(300000L, Position(0, 0), Position(0, 7)), token)
4646
}
4747

4848
@Test
4949
fun `returns a floating point number`() {
5050
lexer.source = StringSource("+12.42")
5151

5252
val token = lexer.nextToken()
53-
assertEquals(Token.Literal.FloatLiteral(12.42, Position(0, 0), Position(0, 5)), token)
53+
assertEquals(Token.FloatLiteral(12.42, Position(0, 0), Position(0, 5)), token)
5454
}
5555

5656
@Test
5757
fun `returns floating point with no leading digits`() {
5858
lexer.source = StringSource("0.32")
5959

6060
val token = lexer.nextToken()
61-
assertEquals(Token.Literal.FloatLiteral(0.32, Position(0, 0), Position(0, 3)), token)
61+
assertEquals(Token.FloatLiteral(0.32, Position(0, 0), Position(0, 3)), token)
6262
}
6363

6464

@@ -67,15 +67,15 @@ class LexerLiteralTest {
6767
lexer.source = StringSource("1.609e-19")
6868

6969
val token = lexer.nextToken()
70-
assertEquals(Token.Literal.FloatLiteral(1.609e-19, Position(0, 0), Position(0, 8)), token)
70+
assertEquals(Token.FloatLiteral(1.609e-19, Position(0, 0), Position(0, 8)), token)
7171
}
7272

7373
@Test
7474
fun `returns floating point with underscores`() {
7575
lexer.source = StringSource("1.6__0_9e-1__9")
7676

7777
val token = lexer.nextToken()
78-
assertEquals(Token.Literal.FloatLiteral(1.609e-19, Position(0, 0), Position(0, 13)), token)
78+
assertEquals(Token.FloatLiteral(1.609e-19, Position(0, 0), Position(0, 13)), token)
7979
}
8080

8181
@Test
@@ -88,7 +88,7 @@ class LexerLiteralTest {
8888
Token.Keyword("char", Position(0, 0), Position(0, 3)),
8989
Token.Identifier("c", Position(0, 5), Position(0, 5)),
9090
Token.Operator("=", Position(0, 7), Position(0, 7)),
91-
Token.Literal.StringLiteral("\'a\'", Position(0, 9), Position(0, 11))
91+
Token.StringLiteral("\'a\'", Position(0, 9), Position(0, 11))
9292
)
9393
)
9494
}
@@ -103,7 +103,7 @@ class LexerLiteralTest {
103103
Token.Keyword("char", Position(0, 0), Position(0, 3)),
104104
Token.Identifier("c", Position(0, 5), Position(0, 5)),
105105
Token.Operator("=", Position(0, 7), Position(0, 7)),
106-
Token.Literal.StringLiteral("\"abcde\"", Position(0, 9), Position(0, 15))
106+
Token.StringLiteral("\"abcde\"", Position(0, 9), Position(0, 15))
107107
)
108108
)
109109
}
@@ -136,9 +136,9 @@ class LexerLiteralTest {
136136
assertTokens(
137137
lexer,
138138
listOf(
139-
Token.Literal.StringLiteral("'\u1234'", Position(0, 0), Position(0, 7)),
140-
Token.Literal.StringLiteral("'\n'", Position(0, 9), Position(0, 12)),
141-
Token.Literal.StringLiteral("'f'", Position(0, 14), Position(0, 17)),
139+
Token.StringLiteral("'\u1234'", Position(0, 0), Position(0, 7)),
140+
Token.StringLiteral("'\n'", Position(0, 9), Position(0, 12)),
141+
Token.StringLiteral("'f'", Position(0, 14), Position(0, 17)),
142142
)
143143
)
144144
}

0 commit comments

Comments
 (0)