Renamed to lyng/3

This commit is contained in:
sergeych committed 2025-06-02 11:52:41 +04:00
1 parent dae09f0dc9
commit 2344e19857
33 files changed
+42 -42

No files matched your search

+1 -1
View File
@@ -1,4 +1,4 @@
# Ling: scripting lang for kotlin multiplatform
# Lyng: scripting lang for kotlin multiplatform
in the form of multiplatform library.
+1 -1
View File
@@ -2,7 +2,7 @@
Mutable list of any objects.
It's class in Ling is `List`:
It's class in Lyng is `List`:
[1,2,3]::class
>>> List
+2 -2
View File
@@ -1,4 +1,4 @@
# OO implementation in Ling
# OO implementation in Lyng
Basic principles:
@@ -15,7 +15,7 @@ Basic principles:
## Instances
Result of executing of any expression or statement in the Ling is the object that
Result of executing of any expression or statement in the Lyng is the object that
inherits `Obj`, but is not `Obj`. For example it could be Int, void, null, real, string, bool, etc.
This means whatever expression returns or the variable holds, is the first-class
+1 -1
View File
@@ -3,7 +3,7 @@
Class that supports double-precision math. Woks much like double in other languages. We honor no floats, so it is '
Real'.
It's class in Ling is `Real`:
It's class in Lyng is `Real`:
(π/2)::class
>>> Real
+7 -7
View File
@@ -1,6 +1,6 @@
# Ling tutorial
# Lyng tutorial
Ling is a very simple language, where we take only most important and popular features from
Lyng is a very simple language, where we take only most important and popular features from
other scripts and languages. In particular, we adopt _principle of minimal confusion_[^1].
In other word, the code usually works as expected when you see it. So, nothing unusual.
@@ -8,12 +8,12 @@ __Other documents to read__ maybe after this one:
- [Advanced topics](advanced_topics.md)
- [OOP notes](OOP.md)
- [math in Ling](math.md)
- [math in Lyng](math.md)
- Some class references: [List](List.md), [Real](Real.md), [Range](Range.md)
# Expressions
Everything is an expression in Ling. Even an empty block:
Everything is an expression in Lyng. Even an empty block:
// empty block
>>> void
@@ -221,7 +221,7 @@ Notice how function definition return a value, instance of `Callable`.
You can use both `fn` and `fun`. Note that function declaration _is an expression returning callable_.
There are default parameters in Ling:
There are default parameters in Lyng:
fn check(amount, prefix = "answer: ") {
prefix + if( amount > 100 )
@@ -273,7 +273,7 @@ If you need to create _unnamed_ function, use alternative syntax (TBD, like { ->
# Lists (aka arrays)
Ling has built-in mutable array class `List` with simple literals:
Lyng has built-in mutable array class `List` with simple literals:
[1, "two", 3.33].size
>>> 3
@@ -546,7 +546,7 @@ We can skip the rest of the loop and restart it, as usual, with `continue` opera
>>> 0
Notice that `total` remains 0 as the end of the outerLoop@ is not reachable: `continue` is always called and always make
Ling to skip it.
Lyng to skip it.
## else statement
+1 -1
View File
@@ -81,7 +81,7 @@ mavenPublishing {
coordinates(group.toString(), "library", version.toString())
pom {
name = "Ling language"
name = "Lyng language"
description = "Kotlin-bound scripting loanguage"
inceptionYear = "2025"
// url = "https://sergeych.net"
@@ -1,4 +1,4 @@
package net.sergeych.ling
package net.sergeych.lyng
data class ParsedArgument(val value: Statement, val pos: Pos, val isSplat: Boolean = false)
@@ -1,4 +1,4 @@
package net.sergeych.ling
package net.sergeych.lyng
//fun buildDoubleFromParts(
// integerPart: Long,
@@ -1,7 +1,7 @@
package net.sergeych.ling
package net.sergeych.lyng
/**
* The LING compiler.
* The LYNG compiler.
*/
class Compiler(
@Suppress("UNUSED_PARAMETER")
@@ -1,4 +1,4 @@
package net.sergeych.ling
package net.sergeych.lyng
internal class CompilerContext(val tokens: List<Token>) : ListIterator<Token> by tokens.listIterator() {
val labels = mutableSetOf<String>()
@@ -1,4 +1,4 @@
package net.sergeych.ling
package net.sergeych.lyng
class Context(
val parent: Context?,
@@ -1,4 +1,4 @@
package net.sergeych.ling
package net.sergeych.lyng
sealed class ListEntry {
data class Element(val accessor: Accessor) : ListEntry()
@@ -1,4 +1,4 @@
package net.sergeych.ling
package net.sergeych.lyng
class LoopBreakContinueException(
val doContinue: Boolean,
@@ -1,4 +1,4 @@
package net.sergeych.ling
package net.sergeych.lyng
import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock
@@ -1,4 +1,4 @@
package net.sergeych.ling
package net.sergeych.lyng
data class ObjBool(val value: Boolean) : Obj() {
override val asStr by lazy { ObjString(value.toString()) }
@@ -1,4 +1,4 @@
package net.sergeych.ling
package net.sergeych.lyng
class ObjChar(val value: Char): Obj() {
@@ -1,4 +1,4 @@
package net.sergeych.ling
package net.sergeych.lyng
val ObjClassType by lazy { ObjClass("Class") }
@@ -1,4 +1,4 @@
package net.sergeych.ling
package net.sergeych.lyng
data class ObjInt(var value: Long) : Obj(), Numeric {
override val asStr get() = ObjString(value.toString())
@@ -1,4 +1,4 @@
package net.sergeych.ling
package net.sergeych.lyng
class ObjList(val list: MutableList<Obj>) : Obj() {
@@ -1,4 +1,4 @@
package net.sergeych.ling
package net.sergeych.lyng
class ObjRange(val start: Obj?, val end: Obj?, val isEndInclusive: Boolean) : Obj() {
@@ -1,4 +1,4 @@
package net.sergeych.ling
package net.sergeych.lyng
class ObjRangeIterator(val self: ObjRange) : Obj() {
@@ -1,4 +1,4 @@
package net.sergeych.ling
package net.sergeych.lyng
import kotlin.math.floor
import kotlin.math.roundToLong
@@ -1,4 +1,4 @@
package net.sergeych.ling
package net.sergeych.lyng
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@@ -1,4 +1,4 @@
package net.sergeych.ling
package net.sergeych.lyng
val digitsSet = ('0'..'9').toSet()
val digits = { d: Char -> d in digitsSet }
@@ -1,4 +1,4 @@
package net.sergeych.ling
package net.sergeych.lyng
data class Pos(val source: Source, val line: Int, val column: Int) {
override fun toString(): String {
@@ -1,4 +1,4 @@
package net.sergeych.ling
package net.sergeych.lyng
import kotlin.math.*
@@ -1,6 +1,6 @@
@file:Suppress("CanBeParameter")
package net.sergeych.ling
package net.sergeych.lyng
open class ScriptError(val pos: Pos, val errorMessage: String,cause: Throwable?=null) : Exception(
"""
@@ -1,4 +1,4 @@
package net.sergeych.ling
package net.sergeych.lyng
class Source(val fileName: String, text: String) {
@@ -1,4 +1,4 @@
package net.sergeych.ling
package net.sergeych.lyng
/**
* Whatever [Obj] stored somewhere
@@ -1,4 +1,4 @@
package net.sergeych.ling
package net.sergeych.lyng
data class Token(val value: String, val pos: Pos, val type: Type) {
val isComment: Boolean by lazy { type == Type.SINLGE_LINE_COMMENT || type == Type.MULTILINE_COMMENT }
@@ -1,4 +1,4 @@
package net.sergeych.ling
package net.sergeych.lyng
fun String.toSource(name: String = "eval"): Source = Source(name, this)
+1 -1
View File
@@ -1,7 +1,7 @@
package io.github.kotlin.fibonacci
import kotlinx.coroutines.test.runTest
import net.sergeych.ling.*
import net.sergeych.lyng.*
import kotlin.test.*
class ScriptTest {
+2 -2
View File
@@ -3,8 +3,8 @@ import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.flow
import kotlinx.coroutines.flow.flowOn
import kotlinx.coroutines.test.runTest
import net.sergeych.ling.Context
import net.sergeych.ling.ObjVoid
import net.sergeych.lyng.Context
import net.sergeych.lyng.ObjVoid
import java.nio.file.Files.readAllLines
import java.nio.file.Paths
import kotlin.test.Test