double dot in for ranges
This commit is contained in:
@@ -15,6 +15,6 @@ func fib[n: I64] : I64
|
|||||||
return fib(n-2) + fib(n-1)
|
return fib(n-2) + fib(n-1)
|
||||||
|
|
||||||
func main[] : I64
|
func main[] : I64
|
||||||
for i in 0:20
|
for i in 0..20
|
||||||
fib(i) |> I64.to_string() |> print()
|
fib(i) |> I64.to_string() |> print()
|
||||||
```
|
```
|
||||||
@@ -4,7 +4,7 @@ func main[] : I64
|
|||||||
Array.push(xs, 6533)
|
Array.push(xs, 6533)
|
||||||
Array.push(xs, 4574)
|
Array.push(xs, 4574)
|
||||||
|
|
||||||
for i in 0:Array.size(xs)
|
for i in 0..Array.size(xs)
|
||||||
xs
|
xs
|
||||||
|> Array.nth(i)
|
|> Array.nth(i)
|
||||||
|> print_i64()
|
|> print_i64()
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
func main[] : I64
|
func main[] : I64
|
||||||
let sum: I64 = 0
|
let sum: I64 = 0
|
||||||
|
|
||||||
for i in 0:1000
|
for i in 0..1000
|
||||||
if i % 5 == 0 || i % 3 == 0
|
if i % 5 == 0 || i % 3 == 0
|
||||||
sum = sum + i
|
sum = sum + i
|
||||||
print_i64(sum)
|
print_i64(sum)
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
func main[] : I64
|
func main[] : I64
|
||||||
let sum: I64 = 0
|
let sum: I64 = 0
|
||||||
|
|
||||||
for i in 0:2000000
|
for i in 0..2000000
|
||||||
if Math.is_prime(i)
|
if Math.is_prime(i)
|
||||||
sum = sum + i
|
sum = sum + i
|
||||||
print_i64(sum)
|
print_i64(sum)
|
||||||
@@ -2,7 +2,7 @@ func num_divisors[n: I64] : I64
|
|||||||
let end: I64 = Math.isqrt(n)
|
let end: I64 = Math.isqrt(n)
|
||||||
|
|
||||||
let result: I64 = 0
|
let result: I64 = 0
|
||||||
for i in 1:end+1
|
for i in 1..end+1
|
||||||
if n % i == 0
|
if n % i == 0
|
||||||
result = result + 2
|
result = result + 2
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ func main[] : I64
|
|||||||
let max: I64 = 0
|
let max: I64 = 0
|
||||||
let max_index: I64 = 0
|
let max_index: I64 = 0
|
||||||
|
|
||||||
for i in 1:1000000
|
for i in 1..1000000
|
||||||
let seq: I64 = collatz_seq(i)
|
let seq: I64 = collatz_seq(i)
|
||||||
if seq > max
|
if seq > max
|
||||||
max = seq
|
max = seq
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ func main[] : I64
|
|||||||
let r: I64 = 20
|
let r: I64 = 20
|
||||||
let out: I64 = 1
|
let out: I64 = 1
|
||||||
|
|
||||||
for i in 1:r+1
|
for i in 1..r+1
|
||||||
out = out * (n - (r - i)) / i
|
out = out * (n - (r - i)) / i
|
||||||
|
|
||||||
print_i64(out)
|
print_i64(out)
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
func main[] : I64
|
func main[] : I64
|
||||||
let out: I64 = 0
|
let out: I64 = 0
|
||||||
|
|
||||||
for a in 500:1000
|
for a in 500..1000
|
||||||
for b in 500:1000
|
for b in 500..1000
|
||||||
if a * b > out
|
if a * b > out
|
||||||
let s: String = I64.to_string(a * b)
|
let s: String = I64.to_string(a * b)
|
||||||
let s_rev: String = String.rev(s)
|
let s_rev: String = String.rev(s)
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
func main[] : I64
|
func main[] : I64
|
||||||
let out: I64 = 1
|
let out: I64 = 1
|
||||||
|
|
||||||
for i in 1:21
|
for i in 1..21
|
||||||
out = Math.lcm(out, i)
|
out = Math.lcm(out, i)
|
||||||
print_i64(out)
|
print_i64(out)
|
||||||
@@ -1,10 +1,10 @@
|
|||||||
func main[] : I64
|
func main[] : I64
|
||||||
let sum_of_squares: I64 = 0
|
let sum_of_squares: I64 = 0
|
||||||
for i in 1:101
|
for i in 1..101
|
||||||
sum_of_squares = sum_of_squares + i * i
|
sum_of_squares = sum_of_squares + i * i
|
||||||
|
|
||||||
let square_of_sum: I64 = 0
|
let square_of_sum: I64 = 0
|
||||||
for i in 1:101
|
for i in 1..101
|
||||||
square_of_sum = square_of_sum + i
|
square_of_sum = square_of_sum + i
|
||||||
square_of_sum = square_of_sum * square_of_sum
|
square_of_sum = square_of_sum * square_of_sum
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ func main[] : I64
|
|||||||
|
|
||||||
let out: I64 = 0
|
let out: I64 = 0
|
||||||
let max: I64 = strlen(n) - 13
|
let max: I64 = strlen(n) - 13
|
||||||
for i in 0:max
|
for i in 0..max
|
||||||
let s: I64 = 1
|
let s: I64 = 1
|
||||||
let j: I64 = 0
|
let j: I64 = 0
|
||||||
while j < 13
|
while j < 13
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
func main[] : I64
|
func main[] : I64
|
||||||
for a in 1:1000
|
for a in 1..1000
|
||||||
for b in 1:1000
|
for b in 1..1000
|
||||||
let c: I64 = 1000 - b - a
|
let c: I64 = 1000 - b - a
|
||||||
if a * a + b * b == c * c
|
if a * a + b * b == c * c
|
||||||
print_i64(a * b * c)
|
print_i64(a * b * c)
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ func do_quicksort[arr: Array, low: I64, high: I64] : I64
|
|||||||
func partition[arr: Array, low: I64, high: I64] : I64
|
func partition[arr: Array, low: I64, high: I64] : I64
|
||||||
let pivot: I64 = Array.nth(arr, high)
|
let pivot: I64 = Array.nth(arr, high)
|
||||||
let i: I64 = low - 1
|
let i: I64 = low - 1
|
||||||
for j in low:high
|
for j in (low)..high
|
||||||
if Array.nth(arr, j) <= pivot
|
if Array.nth(arr, j) <= pivot
|
||||||
i = i + 1
|
i = i + 1
|
||||||
let temp: I64 = Array.nth(arr, i)
|
let temp: I64 = Array.nth(arr, i)
|
||||||
@@ -26,11 +26,11 @@ func partition[arr: Array, low: I64, high: I64] : I64
|
|||||||
func main[] : I64
|
func main[] : I64
|
||||||
let arr: Array = [340, 252, 352, 117, 650, 652, 322, 175, 714, 268, 725, 664]
|
let arr: Array = [340, 252, 352, 117, 650, 652, 322, 175, 714, 268, 725, 664]
|
||||||
|
|
||||||
for i in 0:Array.size(arr)
|
for i in 0..Array.size(arr)
|
||||||
print_i64(Array.nth(arr, i))
|
print_i64(Array.nth(arr, i))
|
||||||
print("------------")
|
print("------------")
|
||||||
|
|
||||||
quicksort(arr)
|
quicksort(arr)
|
||||||
|
|
||||||
for i in 0:Array.size(arr)
|
for i in 0..Array.size(arr)
|
||||||
print_i64(Array.nth(arr, i))
|
print_i64(Array.nth(arr, i))
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
func rule110_step[state: Array] : Array
|
func rule110_step[state: Array] : Array
|
||||||
let new_state: Array = []
|
let new_state: Array = []
|
||||||
|
|
||||||
for i in 0:Array.size(state)
|
for i in 0..Array.size(state)
|
||||||
let left: Bool = false
|
let left: Bool = false
|
||||||
if i - 1 >= 0
|
if i - 1 >= 0
|
||||||
left = Array.nth(state, i-1)
|
left = Array.nth(state, i-1)
|
||||||
@@ -16,7 +16,7 @@ func rule110_step[state: Array] : Array
|
|||||||
|
|
||||||
func to_str[state: Array]: String
|
func to_str[state: Array]: String
|
||||||
let out: String = malloc(Array.size(state))
|
let out: String = malloc(Array.size(state))
|
||||||
for i in 0:Array.size(state)
|
for i in 0..Array.size(state)
|
||||||
if Array.nth(state, i)
|
if Array.nth(state, i)
|
||||||
String.set(out, i, String.nth("#", 0))
|
String.set(out, i, String.nth("#", 0))
|
||||||
else
|
else
|
||||||
@@ -27,11 +27,11 @@ func main[] : I64
|
|||||||
let SIZE: I64 = 60
|
let SIZE: I64 = 60
|
||||||
|
|
||||||
let state: Array = []
|
let state: Array = []
|
||||||
for i in 0:SIZE
|
for i in 0..SIZE
|
||||||
Array.push(state, false)
|
Array.push(state, false)
|
||||||
Array.push(state, true)
|
Array.push(state, true)
|
||||||
|
|
||||||
print(to_str(state))
|
print(to_str(state))
|
||||||
for i in 0:SIZE
|
for i in 0..SIZE
|
||||||
state = rule110_step(state)
|
state = rule110_step(state)
|
||||||
print(to_str(state))
|
print(to_str(state))
|
||||||
@@ -112,7 +112,6 @@ extern strcat
|
|||||||
extern strcpy
|
extern strcpy
|
||||||
extern strdup
|
extern strdup
|
||||||
extern strlcpy
|
extern strlcpy
|
||||||
extern puts
|
|
||||||
extern fopen
|
extern fopen
|
||||||
extern fseek
|
extern fseek
|
||||||
extern ftell
|
extern ftell
|
||||||
|
|||||||
@@ -219,7 +219,7 @@ impl Parser {
|
|||||||
let var = self.consume(TokenType::Identifier, "expected variable name after 'for'")?;
|
let var = self.consume(TokenType::Identifier, "expected variable name after 'for'")?;
|
||||||
self.consume(TokenType::KeywordIn, "expected 'in' after variable name")?;
|
self.consume(TokenType::KeywordIn, "expected 'in' after variable name")?;
|
||||||
let start = self.expression()?;
|
let start = self.expression()?;
|
||||||
self.consume(TokenType::Colon, "expected ':' after the number")?;
|
self.consume(TokenType::DoubleDot, "expected '..' after the number")?;
|
||||||
let end = self.expression()?;
|
let end = self.expression()?;
|
||||||
|
|
||||||
let body = self.block()?;
|
let body = self.block()?;
|
||||||
|
|||||||
14
src/std.zr
14
src/std.zr
@@ -21,7 +21,7 @@ func String.concat[a: String, b: String] : String
|
|||||||
return c
|
return c
|
||||||
|
|
||||||
func String.find[s: String, needle: U8] : I64
|
func String.find[s: String, needle: U8] : I64
|
||||||
for i in 0:strlen(s)
|
for i in 0..strlen(s)
|
||||||
if String.nth(s, i) == needle
|
if String.nth(s, i) == needle
|
||||||
return i
|
return i
|
||||||
return -1
|
return -1
|
||||||
@@ -47,7 +47,7 @@ func String.rev[s: String] : String
|
|||||||
let len: I64 = strlen(s)
|
let len: I64 = strlen(s)
|
||||||
let out: String = malloc(len + 1)
|
let out: String = malloc(len + 1)
|
||||||
|
|
||||||
for i in 0:len
|
for i in 0..len
|
||||||
String.set(out, i, String.nth(s, len - i - 1))
|
String.set(out, i, String.nth(s, len - i - 1))
|
||||||
String.set(out, len, 0)
|
String.set(out, len, 0)
|
||||||
return out
|
return out
|
||||||
@@ -81,7 +81,7 @@ func U8.parse_i64[c: U8]: I64
|
|||||||
return c - 48
|
return c - 48
|
||||||
|
|
||||||
func I64.to_string[n: I64] : String
|
func I64.to_string[n: I64] : String
|
||||||
let x: I64 = malloc(21)
|
let x: String = malloc(21)
|
||||||
sprintf(x, "%ld", n)
|
sprintf(x, "%ld", n)
|
||||||
return x
|
return x
|
||||||
|
|
||||||
@@ -112,7 +112,7 @@ func Math.abs[n: I64] : I64
|
|||||||
|
|
||||||
func Math.pow[b: I64, e: I64] : I64
|
func Math.pow[b: I64, e: I64] : I64
|
||||||
let out: I64 = 1
|
let out: I64 = 1
|
||||||
for i in 0:e
|
for i in 0..e
|
||||||
out = out * b
|
out = out * b
|
||||||
return out
|
return out
|
||||||
|
|
||||||
@@ -154,12 +154,12 @@ func Array.new[] : Array
|
|||||||
|
|
||||||
func Math.Crypto.rc4[key: String, plaintext: String]: String
|
func Math.Crypto.rc4[key: String, plaintext: String]: String
|
||||||
let S: String = malloc(256)
|
let S: String = malloc(256)
|
||||||
for i in 0:256
|
for i in 0..256
|
||||||
String.set(S, i, i)
|
String.set(S, i, i)
|
||||||
|
|
||||||
let j: I64 = 0
|
let j: I64 = 0
|
||||||
let key_len: I64 = strlen(key)
|
let key_len: I64 = strlen(key)
|
||||||
for i in 0:256
|
for i in 0..256
|
||||||
j = (j + String.nth(S, i) + String.nth(key, i % key_len)) % 256
|
j = (j + String.nth(S, i) + String.nth(key, i % key_len)) % 256
|
||||||
let tmp: U8 = String.nth(S, i)
|
let tmp: U8 = String.nth(S, i)
|
||||||
String.set(S, i, String.nth(S, j))
|
String.set(S, i, String.nth(S, j))
|
||||||
@@ -169,7 +169,7 @@ func Math.Crypto.rc4[key: String, plaintext: String]: String
|
|||||||
j = 0
|
j = 0
|
||||||
let plaintext_len: I64 = strlen(plaintext)
|
let plaintext_len: I64 = strlen(plaintext)
|
||||||
let ciphertext: String = malloc(plaintext_len+1)
|
let ciphertext: String = malloc(plaintext_len+1)
|
||||||
for n in 0:plaintext_len
|
for n in 0..plaintext_len
|
||||||
i = (i + 1) % 256
|
i = (i + 1) % 256
|
||||||
j = (j + String.nth(S, i)) % 256
|
j = (j + String.nth(S, i)) % 256
|
||||||
|
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ pub enum TokenType {
|
|||||||
And,
|
And,
|
||||||
Or,
|
Or,
|
||||||
Pipe,
|
Pipe,
|
||||||
|
DoubleDot,
|
||||||
|
|
||||||
Equal,
|
Equal,
|
||||||
DoubleEqual,
|
DoubleEqual,
|
||||||
@@ -147,6 +148,13 @@ impl Tokenizer {
|
|||||||
'%' => self.add_token(TokenType::Mod),
|
'%' => self.add_token(TokenType::Mod),
|
||||||
'^' => self.add_token(TokenType::Xor),
|
'^' => self.add_token(TokenType::Xor),
|
||||||
':' => self.add_token(TokenType::Colon),
|
':' => self.add_token(TokenType::Colon),
|
||||||
|
'.' => {
|
||||||
|
if self.match_char('.') {
|
||||||
|
self.add_token(TokenType::DoubleDot)
|
||||||
|
} else {
|
||||||
|
return error!(self.loc, "expected '.' after '.'");
|
||||||
|
}
|
||||||
|
}
|
||||||
'/' => {
|
'/' => {
|
||||||
if self.match_char('/') {
|
if self.match_char('/') {
|
||||||
while !self.eof() && self.peek() != '\n' {
|
while !self.eof() && self.peek() != '\n' {
|
||||||
@@ -287,7 +295,10 @@ impl Tokenizer {
|
|||||||
self.advance();
|
self.advance();
|
||||||
}
|
}
|
||||||
|
|
||||||
if self.peek() == '.' {
|
if self.peek() == '.'
|
||||||
|
&& (self.current + 1 >= self.source.len())
|
||||||
|
&& self.source[self.current + 1].is_ascii_digit()
|
||||||
|
{
|
||||||
self.advance();
|
self.advance();
|
||||||
while self.peek().is_ascii_digit() {
|
while self.peek().is_ascii_digit() {
|
||||||
self.advance();
|
self.advance();
|
||||||
|
|||||||
2
test.zr
2
test.zr
@@ -22,5 +22,5 @@ func main[] : I64
|
|||||||
system("cargo build --release")
|
system("cargo build --release")
|
||||||
|
|
||||||
let files: Array = OS.listdir("examples/")
|
let files: Array = OS.listdir("examples/")
|
||||||
for i in 0:Array.size(files)
|
for i in 0..Array.size(files)
|
||||||
run_test(Array.nth(files, i))
|
run_test(Array.nth(files, i))
|
||||||
Reference in New Issue
Block a user