minor refactoring
This commit is contained in:
		
							parent
							
								
									d3f23be7fe
								
							
						
					
					
						commit
						60384060bf
					
				@ -11,12 +11,14 @@ class Compiler(
 | 
			
		||||
    class Settings
 | 
			
		||||
 | 
			
		||||
    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>()
 | 
			
		||||
        while (parseStatement(tokens, braceMeansLambda = true)?.also {
 | 
			
		||||
        while (parseStatement(cc, braceMeansLambda = true)?.also {
 | 
			
		||||
                statements += it
 | 
			
		||||
            } != null) {/**/
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@ -8,7 +8,7 @@ val idNextChars = { d: Char -> d.isLetter() || d == '_' || d.isDigit() }
 | 
			
		||||
@Suppress("unused")
 | 
			
		||||
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 tokens = mutableListOf<Token>()
 | 
			
		||||
    do {
 | 
			
		||||
 | 
			
		||||
@ -18,7 +18,7 @@ class ScriptTest {
 | 
			
		||||
            val source = src.toSource()
 | 
			
		||||
            assertEquals(
 | 
			
		||||
                Token(expected, source.posAt(row, col), type),
 | 
			
		||||
                parseLing(source)[offset]
 | 
			
		||||
                parseLyng(source)[offset]
 | 
			
		||||
            )
 | 
			
		||||
        }
 | 
			
		||||
        check("1", Token.Type.INT, 0, 0, "1 + x\n2", 0)
 | 
			
		||||
@ -36,7 +36,7 @@ class ScriptTest {
 | 
			
		||||
            val source = src.toSource()
 | 
			
		||||
            assertEquals(
 | 
			
		||||
                Token(expected, source.posAt(row, col), type),
 | 
			
		||||
                parseLing(source)[offset]
 | 
			
		||||
                parseLyng(source)[offset]
 | 
			
		||||
            )
 | 
			
		||||
        }
 | 
			
		||||
        check("1", Token.Type.INT, 0, 0, "1")
 | 
			
		||||
@ -72,13 +72,13 @@ class ScriptTest {
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    fun parseRangeTest() {
 | 
			
		||||
        var tt = parseLing("5 .. 4".toSource())
 | 
			
		||||
        var tt = parseLyng("5 .. 4".toSource())
 | 
			
		||||
 | 
			
		||||
        assertEquals(Token.Type.INT, tt[0].type)
 | 
			
		||||
        assertEquals(Token.Type.DOTDOT, tt[1].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.DOTDOTLT, tt[1].type)
 | 
			
		||||
@ -87,13 +87,13 @@ class ScriptTest {
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    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.IN, tt[1].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.DOTDOTLT, tt[1].type)
 | 
			
		||||
@ -103,7 +103,7 @@ class ScriptTest {
 | 
			
		||||
    @Test
 | 
			
		||||
    fun parserLabelsTest() {
 | 
			
		||||
        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("break", src.posAt(0, 7), Token.Type.ID), tt[1])
 | 
			
		||||
        assertEquals(Token("label", src.posAt(0, 12), Token.Type.ATLABEL), tt[2])
 | 
			
		||||
@ -116,7 +116,7 @@ class ScriptTest {
 | 
			
		||||
            println( "world" )
 | 
			
		||||
        """.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("(", src.posAt(0, 7), Token.Type.LPAREN), p.next())
 | 
			
		||||
@ -133,7 +133,7 @@ class ScriptTest {
 | 
			
		||||
    fun parse1Test() {
 | 
			
		||||
        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("+", src.posAt(0, 2), Token.Type.PLUS), p.next())
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user