Lury 最初のリリース (プロトタイプ版) のため、Lury 構想まとめ に記述されている機能の実装はごく僅かです。
- Lury Specification 0.1 の一部に対応しています(< 0.1)。
- 字句解析器
- 将来バージョンとの前方互換のため、Lury 構想まとめ で取り扱う全てのキーワード、リテラルや記号をトークンとして認識しています。従って 0.1 で意味のないトークンも多く存在しています。
- 構文解析器
- 実行エンジン
- 試作のため AST を直接巡回して実行しています。
- リテラル
nil
- 整数リテラル (Integer型)
- 実数リテラル (Real型)
- 虚数リテラル (Complex型)
- ブールリテラル (Boolean型)
- 文字列リテラル (String型)
- 演算式
- ドット演算子
.
- 前置インクリメント、後置インクリメント
++
- 前置デクリメント、後置デクリメント
--
- 関数呼び出し
(...)
- 冪乗演算子
**
- 符号演算子
+
-
- ビット否定演算子
~
- 乗算演算子
*
- 除算演算子
/
//
- 余剰演算子
%
- 加算演算子
+
- 減算演算子
-
- 結合演算子
~
- 算術シフト演算子
<<
>>
- ビット演算子
&
^
|
- 比較演算子
<
>
<=
>=
==
!=
- 論理演算子
!
not
&&
and
||
or
- 条件演算子
? :
if...else
- 代入演算子
=
**=
*=
/=
//=
%=
+=
-=
~=
<<=
>>=
&=
^=
|=
- ドット演算子
- 単純文
- pass 文
- 式文
- return 文
- break 文
- continue 文
- 複合文
- if 文
- while 文
- function 文 (関数定義, Function型)
- 組み込み関数
- println
- class 文 (クラス定義)
- import 文
- 同一性判定演算子
is
!is
- 以上は Lury Specification 0.2 以降で規定するデータモデル確立後に実装予定。
- コンマ演算子
- Lury Specification 0.2 以降で規定するタプルとコンテナに絡むため見送り。
- 名前付き実引数
他の 多くの 言語とは異なる特徴をピックアップしています。
Python と同様にオフサイドルールによって制御構造を記述します。インデントは半角スペース、タブなどが使えます。0.1 では全角スペースに対応していません。
def test(foo):
if foo > 30:
println('foo は 30 よりも大きい')
elif foo > 20:
println('foo は 20 よりも大きい')
else:
println('foo は 20 以下')
test(40)
Python と同様に #
でコメントを記述できます。ただし、独自に ###
で複数行コメントが記述できます。
# これがコメント行
a = b = c = 10
###
複数行に渡るコメントは # を3つ書く。
###
# 推奨はしないがこのようなコメントも可能
println(a, ### b, ### c)
Python と同様に while 文に else 節を記述できます。while 文の条件が false
となってループを抜ける場合に実行されます。return
、break
で途中脱出した場合は実行されません。
関数が仮引数を一つも取らない場合は括弧を省略できます。
def test:
println('hello!')
test()
関数呼び出しが実引数を一つも取らない場合は括弧を省略できます。しかし関数そのものにアクセス(参照)したい場合は ref
というキーワードを使って明示的に参照しなければなりません。
実際の ref
は左辺値に直接的に参照するキーワードであり、関数オブジェクト以外でも使用できます。
def test:
println('hello!')
a = ref test
a # ここで hello! が出力される
D言語と同様に、アンダースコア _
を使って数値リテラルを区切ることができます。
dec = 1_000_000
hex = 0xffff_00ff
oct = 0o755_644
bin = 0b0010_1100
Lury ではクロージャを作成できます。
def createCounter:
c = 0
def runner:
println(++c)
return ref runner
a = createCounter
b = createCounter
a # 1
a # 2
a # 3
b # 1
識別子には一部の絵文字を使用できます。矢印など、一部の絵文字には対応していません。
🐬 = 'Lury'