minor refactoring

This commit is contained in:
Sergey Chernov 2025-06-09 13:43:19 +04:00
parent d3f23be7fe
commit 60384060bf
3 changed files with 15 additions and 13 deletions

View File

@ -11,12 +11,14 @@ class Compiler(
class Settings class Settings
fun compile(source: Source): Script { fun compile(source: Source): Script {
return parseScript(source.startPos, CompilerContext(parseLing(source))) return parseScript(source.startPos,
CompilerContext(parseLyng(source))
)
} }
private fun parseScript(start: Pos, tokens: CompilerContext): Script { private fun parseScript(start: Pos, cc: CompilerContext): Script {
val statements = mutableListOf<Statement>() val statements = mutableListOf<Statement>()
while (parseStatement(tokens, braceMeansLambda = true)?.also { while (parseStatement(cc, braceMeansLambda = true)?.also {
statements += it statements += it
} != null) {/**/ } != null) {/**/
} }

View File

@ -8,7 +8,7 @@ val idNextChars = { d: Char -> d.isLetter() || d == '_' || d.isDigit() }
@Suppress("unused") @Suppress("unused")
val idFirstChars = { d: Char -> d.isLetter() || d == '_' } val idFirstChars = { d: Char -> d.isLetter() || d == '_' }
fun parseLing(source: Source): List<Token> { fun parseLyng(source: Source): List<Token> {
val p = Parser(fromPos = source.startPos) val p = Parser(fromPos = source.startPos)
val tokens = mutableListOf<Token>() val tokens = mutableListOf<Token>()
do { do {

View File

@ -18,7 +18,7 @@ class ScriptTest {
val source = src.toSource() val source = src.toSource()
assertEquals( assertEquals(
Token(expected, source.posAt(row, col), type), Token(expected, source.posAt(row, col), type),
parseLing(source)[offset] parseLyng(source)[offset]
) )
} }
check("1", Token.Type.INT, 0, 0, "1 + x\n2", 0) check("1", Token.Type.INT, 0, 0, "1 + x\n2", 0)
@ -36,7 +36,7 @@ class ScriptTest {
val source = src.toSource() val source = src.toSource()
assertEquals( assertEquals(
Token(expected, source.posAt(row, col), type), Token(expected, source.posAt(row, col), type),
parseLing(source)[offset] parseLyng(source)[offset]
) )
} }
check("1", Token.Type.INT, 0, 0, "1") check("1", Token.Type.INT, 0, 0, "1")
@ -72,13 +72,13 @@ class ScriptTest {
@Test @Test
fun parseRangeTest() { fun parseRangeTest() {
var tt = parseLing("5 .. 4".toSource()) var tt = parseLyng("5 .. 4".toSource())
assertEquals(Token.Type.INT, tt[0].type) assertEquals(Token.Type.INT, tt[0].type)
assertEquals(Token.Type.DOTDOT, tt[1].type) assertEquals(Token.Type.DOTDOT, tt[1].type)
assertEquals(Token.Type.INT, tt[2].type) assertEquals(Token.Type.INT, tt[2].type)
tt = parseLing("5 ..< 4".toSource()) tt = parseLyng("5 ..< 4".toSource())
assertEquals(Token.Type.INT, tt[0].type) assertEquals(Token.Type.INT, tt[0].type)
assertEquals(Token.Type.DOTDOTLT, tt[1].type) assertEquals(Token.Type.DOTDOTLT, tt[1].type)
@ -87,13 +87,13 @@ class ScriptTest {
@Test @Test
fun parseInTest() { fun parseInTest() {
var tt = parseLing("5 in 4".toSource()) var tt = parseLyng("5 in 4".toSource())
assertEquals(Token.Type.INT, tt[0].type) assertEquals(Token.Type.INT, tt[0].type)
assertEquals(Token.Type.IN, tt[1].type) assertEquals(Token.Type.IN, tt[1].type)
assertEquals(Token.Type.INT, tt[2].type) assertEquals(Token.Type.INT, tt[2].type)
tt = parseLing("5 ..< 4".toSource()) tt = parseLyng("5 ..< 4".toSource())
assertEquals(Token.Type.INT, tt[0].type) assertEquals(Token.Type.INT, tt[0].type)
assertEquals(Token.Type.DOTDOTLT, tt[1].type) assertEquals(Token.Type.DOTDOTLT, tt[1].type)
@ -103,7 +103,7 @@ class ScriptTest {
@Test @Test
fun parserLabelsTest() { fun parserLabelsTest() {
val src = "label@ break@label".toSource() val src = "label@ break@label".toSource()
val tt = parseLing(src) val tt = parseLyng(src)
assertEquals(Token("label", src.posAt(0, 0), Token.Type.LABEL), tt[0]) assertEquals(Token("label", src.posAt(0, 0), Token.Type.LABEL), tt[0])
assertEquals(Token("break", src.posAt(0, 7), Token.Type.ID), tt[1]) assertEquals(Token("break", src.posAt(0, 7), Token.Type.ID), tt[1])
assertEquals(Token("label", src.posAt(0, 12), Token.Type.ATLABEL), tt[2]) assertEquals(Token("label", src.posAt(0, 12), Token.Type.ATLABEL), tt[2])
@ -116,7 +116,7 @@ class ScriptTest {
println( "world" ) println( "world" )
""".trimIndent().toSource() """.trimIndent().toSource()
val p = parseLing(src).listIterator() val p = parseLyng(src).listIterator()
assertEquals(Token("println", src.posAt(0, 0), Token.Type.ID), p.next()) assertEquals(Token("println", src.posAt(0, 0), Token.Type.ID), p.next())
assertEquals(Token("(", src.posAt(0, 7), Token.Type.LPAREN), p.next()) assertEquals(Token("(", src.posAt(0, 7), Token.Type.LPAREN), p.next())
@ -133,7 +133,7 @@ class ScriptTest {
fun parse1Test() { fun parse1Test() {
val src = "2 + 7".toSource() val src = "2 + 7".toSource()
val p = parseLing(src).listIterator() val p = parseLyng(src).listIterator()
assertEquals(Token("2", src.posAt(0, 0), Token.Type.INT), p.next()) assertEquals(Token("2", src.posAt(0, 0), Token.Type.INT), p.next())
assertEquals(Token("+", src.posAt(0, 2), Token.Type.PLUS), p.next()) assertEquals(Token("+", src.posAt(0, 2), Token.Type.PLUS), p.next())