219 lines
4.5 KiB
Markdown
219 lines
4.5 KiB
Markdown
# Kyn Syntax
|
|
|
|
This document details syntax of provided Kyn modules.
|
|
|
|
Call a module by writing it's name, then the arguments for the module.
|
|
|
|
Substitute the output of a module into another module's arguments by enclosing the call in `(`parenthases`)`.
|
|
|
|
Access a variable by prefixing it's name with a `$` dollar sign.
|
|
|
|
## Data Types
|
|
|
|
Kyn supports several data types: strings, integers, doubles (floating-point numbers), and lists.
|
|
|
|
### Strings
|
|
Strings are enclosed in double quotes.
|
|
`let myString = "Hello, World!"`
|
|
|
|
### Numbers
|
|
Numbers can be integers or doubles.
|
|
`let myInt = 42`
|
|
`let myDouble = 3.14`
|
|
|
|
### Lists
|
|
Lists are ordered collections of values, enclosed in square brackets.
|
|
`let myList = [1, "two", 3.0, ["nested", "list"]]`
|
|
|
|
## Input/Output
|
|
|
|
### print
|
|
|
|
Prints all the arguments provided to the console.
|
|
|
|
Example: `print "Hello!"`
|
|
|
|
### println
|
|
|
|
Prints all the arguments provided to theconsole, appending a newline after.
|
|
|
|
Example: `println "Hello!"`
|
|
|
|
### input
|
|
|
|
Gets a line of input from the console.
|
|
|
|
Example: `input` (this does nothing but prompt the user)
|
|
|
|
Another example: `let userInput = (input)`
|
|
|
|
## Variables and Data
|
|
|
|
### let
|
|
|
|
Defines a variable to the value provided. If no value is provided, it defaults to an empty string.
|
|
|
|
Example: `let myVar = "Hello!"`
|
|
Example: `let anotherVar`
|
|
|
|
### concat
|
|
|
|
Concatenates multiple strings or numbers together.
|
|
|
|
Example: `println (concat "There are " 3 " apples.")` # Prints "There are 3 apples."
|
|
|
|
## Indexed Operations
|
|
|
|
You can access elements of lists and characters of strings by their index (starting from 0).
|
|
|
|
### Get element
|
|
|
|
Syntax: `(variable index)`
|
|
|
|
```kyn
|
|
let myList = ["a", "b", "c"]
|
|
println (myList 1) # Prints "b"
|
|
|
|
let myString = "hello"
|
|
println (myString 2) # Prints "l"
|
|
```
|
|
|
|
### Set element
|
|
|
|
Syntax: `variable index = newValue`
|
|
|
|
```kyn
|
|
let myList = ["a", "b", "c"]
|
|
myList 1 = "z"
|
|
println $myList # Prints ["a", "z", "c"]
|
|
|
|
let myString = "hello"
|
|
myString 0 = "j"
|
|
println $myString # Prints "jello"
|
|
```
|
|
|
|
### size
|
|
|
|
You can get the number of elements in a list or characters in a string using `size`.
|
|
|
|
Syntax: `(variable size)`
|
|
|
|
```kyn
|
|
let myList = [1, 2, 3, 4]
|
|
println (myList size) # Prints 4
|
|
|
|
let myString = "hello"
|
|
println (myString size) # Prints 5
|
|
```
|
|
|
|
## Computations
|
|
|
|
### math
|
|
|
|
Computes a mathematical expression. Supports addition (+), subtraction (-), multiplication (*), division (/), power to (^) and mod (%). Follows order of operations.
|
|
|
|
Example: `math 4 * 3 + 12 / 4 - 5 ^ 3`
|
|
|
|
### compare
|
|
|
|
Compares two values. Supports equal (==) and inequal (!=) on all values. Supports greater than (>), greater than or equal to (>=), lesser than (<), and lesser than or equal to (<=) for numbers. Returns "1" for true and "0" for false.
|
|
|
|
## Control Flow
|
|
|
|
### exit
|
|
|
|
Exits the program with a return code. If no return code or an invalid return code is provided, exits with code 0. Otherwise, exits with given code.
|
|
|
|
### if
|
|
|
|
Runs a block of code if a condition is true. An optional `else` block can be provided. The condition is considered true if it's not 0, "false", or an empty string/list.
|
|
|
|
Example:
|
|
|
|
```kyn
|
|
if compare 1 == 1 {
|
|
println "1 is the same as 1"
|
|
} else {
|
|
println "1 is not the same as 1"
|
|
}
|
|
```
|
|
|
|
### while
|
|
|
|
Runs a block of code repeatedly as long as a condition is true.
|
|
|
|
Example:
|
|
|
|
```kyn
|
|
let number = 0
|
|
|
|
while compare $number < 10 {
|
|
number = (math $number + 1)
|
|
println $number
|
|
}
|
|
```
|
|
|
|
### fun
|
|
|
|
Defines a function with a name, a list of arguments, and a body.
|
|
|
|
```kyn
|
|
fun multiply a b {
|
|
return (math $a * $b)
|
|
}
|
|
|
|
let product = (multiply 7 6)
|
|
println $product # Prints 42
|
|
```
|
|
|
|
### return
|
|
|
|
Exits a function, optionally returning a value.
|
|
|
|
```kyn
|
|
fun myFunc {
|
|
println "doing stuff..."
|
|
return "done"
|
|
println "this will not print"
|
|
}
|
|
|
|
let result = (myFunc)
|
|
println $result # Prints "doing stuff..." and then "done"
|
|
```
|
|
|
|
## File I/O
|
|
|
|
### file
|
|
|
|
The `file` module contains many submodules for reading from and writing to files.
|
|
|
|
#### file read
|
|
|
|
Reads an entire file. Returns a string.
|
|
|
|
Example: `file read "myFile.txt"`
|
|
|
|
#### file readlines
|
|
|
|
Reads an entire file. Returns a list of strings, split by the line.
|
|
|
|
Example: `file readlines "myFile.txt"`
|
|
|
|
#### file exists
|
|
|
|
Determines whether or not a file exists on the system. If yes, returns "true". If not, returns "false".
|
|
|
|
Example: `file exists "myFile.txt"`
|
|
|
|
#### file write
|
|
|
|
Overwrites a file with content provided. This is destructive, be careful!
|
|
|
|
Example: `file write "myFile.txt" "Hello from the file!"`
|
|
|
|
#### file append
|
|
|
|
Appends text to the end of a file.
|
|
|
|
Example: `file append "myFile.txt" "Hello from the end of the file!"`
|