// 01 lexical_literals
var decimal = 42;
var hex_value = 0xFF;
var binary_value = 0b1010;
var separated = 1_000_000;
var scientific = 6.02e23;
var raw_string = `C:\path\*`;
var multiline_string = """line one
line two""";
var empty_value = null;
var yes = true;
Examples embedded
示例直接融入页面,用于阅读和解释器测试对照。
这些片段来自 `examples/syntax` 的当前语法分组,但页面内直接展示,不要求用户下载文件。
// 02 declarations_types
var bool flag = true;
var int count = 10;
var float ratio = 0.5;
var string name = "lns";
const int MAX_COUNT = 100;
struct Point {
var int x;
var int y;
}
var Point origin = Point{ x = 0, y = 0 };
var inferred_point = Point{ x = 1, y = 2 };
// 03 expressions_operators
var a = 10;
var b = 3;
var arithmetic = a + b * 2 - 4 / 2 + 7 % 3;
var bitwise = (a & b) | (a ^ b);
var compare = a > b && b <= 3 || a == 10;
var ternary = compare ? a : b;
var fallback = null ?? 99;
a++;
++b;
var type_name = typeof a;
var is_number = a is int;
// 04 control_flow
for (var i = 0; i < 5; i++) {
if (i == 2) {
continue;
}
}
var stop = false;
for (var row = 0; row < 3; row++) {
if (stop) {
break;
}
for (var col = 0; col < 3; col++) {
if (row + col > 3) {
stop = true;
break;
}
}
}
// 05 functions_lambdas_returns
fn int inc(int v) {
return v + 1;
}
function (int, int) divmod(int a, int b) {
return a / b, a % b;
}
function collect(first, ...rest) {
return first, rest;
}
var double_value = (x) => x * 2;
var next_value = x => x + 1;
// 06 tables_structs_methods
var arr = { 1, 2, 3 };
var map = { name = "lns", ver = 1.0 };
var mix = { 1, x = 2, [3] = "three" };
struct Animal {
var string name;
var int age = 0;
}
function string Animal.speak(self) {
return self.name + " speaks";
}
var dog = Animal{ name = "Rex", age = 3 };
var sound = dog.speak();
// 07 modules_api_extern
import gpio;
import { clamp, avg } from "utils";
import * as mathx from "mathx";
api "gpio" {
extern void write(int pin, num value);
extern num read(int pin);
extern (int, int) read_pair();
}
export function int exported_inc(int v) {
return v + 1;
}
// examples/bindings/mylib.lnb
// Generator automatically pairs this file with mylib.h.
option module = "mylib";
option output_contract = "trusted/lib/mylib.lns";
option output_glue = "mylib_glue.c";
option output_init = "mylib_init.c";
option init_name = "lnlib_init_mylib";
api "mylib" {
starts : int = mylib_starts();
add : num = mylib_add(num a, num b);
name : str = mylib_name() @nonnull;
set_led : int! = mylib_set_led(int pin, int on);
}
api "device" {
open : handle = device_open(str id) @handle("Device") @borrowed;
close : int! = device_close(handle device) @handle("Device");
}
// 99 comprehensive_syntax_test
import gpio;
import { clamp } from "utils";
api "gpio" {
extern void write(int pin, num value);
extern num read(int pin);
}
struct Counter {
var string name;
var int value = 0;
}
function int Counter.next(self) {
self.value++;
return self.value;
}
fn int main() {
var Counter c = Counter{ name = "main", value = 0 };
var arr = { 1, 2, 3, [5] = 5 };
var computed = (x) => x * 2;
var value = computed(c.next());
for (var i = 0; i < 3; i++) {
arr[i] = arr[i] ?? 0;
value += arr[i];
}
try {
gpio.write(1, value);
} catch (e) {
value = -1;
} finally {
value += 1;
}
return value is int ? value : 0;
}