Essen0
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
* プログラミング言語 Essen
-(by [[K]], 2016.06.29)
** これはなに?
-[[persistent-C>persistent_C]]([[KHPC]])を作っているうち...
-nv系言語仕様は、構文仕様の機能仕様が分かれている。
-これが完璧にして最高の仕様だとは思っていないので、もしこ...
-インタプリタを想定していますが、インタプリタじゃなければ...
-実行速度はあまり追及していません。どうせインタプリタなの...
-柔軟にいろんな既存言語に似た書き方ができて、その割に処理...
-もし速度がほしくなったら、その時に仕様を見直して、作り直...
-字句解析のルールは軟弱なので、「+-3」とか「a+++++b」みた...
** 構文仕様
-字句解析のルール:
--字句解析というのは、ソースコードをトークンに切り分ける...
--文字列定数の中以外で、//が来たら行末まで無視する。
--文字列定数の中以外で、/* */があったらそれはスペース1個...
--/* ~ */ は入れ子にできる。
--文字定数や文字列定数は切り分けない(当然である)。
--CRとLFとスペースとタブは文字種0とする。「!%&-=^~|+*:.<>...
--文字種0は必ずトークンの切れ目にはなるが、トークンの一部...
--文字種1は文字種1がつながっている限り、トークンの切れ目...
--文字種2は文字種2がつながっている限り、トークンの切れ目...
--文字種3は何が後続しようとも、1文字だけでトークンを構成...
--唯一の例外として、数字で始まるトークン内に.があった場合...
-構文解析のルール:
--カッコの対応関係に注意しつつ、文末の;を探す。なお、中か...
--文の中のトークンを一つずつ確認する。もし演算子属性のト...
--文の中に発動可能な演算子が複数ある場合は、最も高い優先...
---ちなみにEssenでは優先順位に整数を採用し、優先順位が偶...
--こうしてどの演算子が発動するか決まったら、その演算子は...
--そして残ったトークン列に対して、上記に戻ってまた演算子...
--なお、中かっこでくくった部分については、演算子は一切発...
--何が演算子で何が演算子でないかは、nv系言語仕様では規定...
** 構文構成例
-普通の計算。
a=b+c*2;
--「 a = b + c * 2 ; 」
--最初に二項演算子の * が発動して、c*2の結果と置換される...
--「 a = b + 6 ; 」
--次に二項演算子の + が発動して、b+6の結果と置換される。...
--「 a = 8 ; 」
--最後に二項演算子の = が発動して、aに8が代入され、式の値...
--「 8 ; 」
--もう演算子はないので、次の文に制御が移る。
-単項演算子と二項演算子が混ざった例。
a = -1 * +1;
--「 a = - 1 * + 1 ; 」
--単項演算子の+や-は、二項演算子の*よりも優先度を高く設定...
--単項演算子の+や-は、自分の後ろに数か数になりうるものが...
--このルールにより、aには正しく-1が代入されることになる。
-二重のマイナス符号の例。
a = - -b;
--「 a = - - b ; 」
--仮に単項マイナスが左結合だったとしても、左の-は、最初は...
--「 a = - -2 ; 」
--あとは普通に処理されて、aは2になる。
-英字で構成された演算子。記号で構成された変数名。
--「mod」や「and」などの英字で構成されたものも、nv系言語...
--「sin」を演算子としておけば、「y=sin x;」なども可能であ...
-代入方向の逆転。
--「=>」という演算子を定義しておけば、「a + b => c;」とい...
-逆ポーランド記法。
--「<*>」や「<=>」という逆ポーランド記法の演算子があり(...
--また混在も可能である。「a = b c <*>;」
-制御構文について。
--たとえば「if」は関数である。条件が成立した時の { } や不...
if (a == 3) { b = a; }; // 最後の;は必要で省略できない。
if (a < b) then { max = b } else { max = a }; // thenやe...
max = if (a < b) { b } { a }; // ifが値を返すとしたら、...
-for文について。
--forをそれっぽく書くのには限界がある。「for { i = 0 } { ...
--「while { 条件式 } { ... }; 」は問題ない。
--「do { ... } while { 条件式 }; 」は、doを演算子にして、...
--いずれにせよ、何度も評価する条件式は必ず中カッコでくく...
---もしくはdoやwhile演算子が、後続するカッコを中かっこに...
-中かっこでくくられたコード片について。
--これらが関数に渡されるときは、単なる文字列としてソース...
-ほとんどすべての演算子や構文のための関数が、ユーザ関数と...
--優先順位などのつじつまを考えるのは容易ではないかもしれ...
-ifについて。
--if (条件式1) { 文1 } { 条件式2 } { 文2 } { 条件式3 } { ...
--つまりif関数は、引数の数が可変である。中カッコでくくら...
--これは else if が連なったものを表していて、最後の文eはe...
** 機能仕様
-整数型は256ビットの精度を持つ。実数型は8倍精度。
-変数には型がなく、値が型を持つ。ヌル型、整数型、実数型、...
-全ての変数には「リビジョン」という属性があり、代入するた...
--構造体に関しては、メンバ変数が更新されるたびに自身のリ...
-構造体型は、メンバ名をabc.memberと書いてもよいし、abc["m...
** おまけ
-関数の引数として { } のコード片を渡せるという仕様は、Rub...
* こめんと欄
#comment
終了行:
* プログラミング言語 Essen
-(by [[K]], 2016.06.29)
** これはなに?
-[[persistent-C>persistent_C]]([[KHPC]])を作っているうち...
-nv系言語仕様は、構文仕様の機能仕様が分かれている。
-これが完璧にして最高の仕様だとは思っていないので、もしこ...
-インタプリタを想定していますが、インタプリタじゃなければ...
-実行速度はあまり追及していません。どうせインタプリタなの...
-柔軟にいろんな既存言語に似た書き方ができて、その割に処理...
-もし速度がほしくなったら、その時に仕様を見直して、作り直...
-字句解析のルールは軟弱なので、「+-3」とか「a+++++b」みた...
** 構文仕様
-字句解析のルール:
--字句解析というのは、ソースコードをトークンに切り分ける...
--文字列定数の中以外で、//が来たら行末まで無視する。
--文字列定数の中以外で、/* */があったらそれはスペース1個...
--/* ~ */ は入れ子にできる。
--文字定数や文字列定数は切り分けない(当然である)。
--CRとLFとスペースとタブは文字種0とする。「!%&-=^~|+*:.<>...
--文字種0は必ずトークンの切れ目にはなるが、トークンの一部...
--文字種1は文字種1がつながっている限り、トークンの切れ目...
--文字種2は文字種2がつながっている限り、トークンの切れ目...
--文字種3は何が後続しようとも、1文字だけでトークンを構成...
--唯一の例外として、数字で始まるトークン内に.があった場合...
-構文解析のルール:
--カッコの対応関係に注意しつつ、文末の;を探す。なお、中か...
--文の中のトークンを一つずつ確認する。もし演算子属性のト...
--文の中に発動可能な演算子が複数ある場合は、最も高い優先...
---ちなみにEssenでは優先順位に整数を採用し、優先順位が偶...
--こうしてどの演算子が発動するか決まったら、その演算子は...
--そして残ったトークン列に対して、上記に戻ってまた演算子...
--なお、中かっこでくくった部分については、演算子は一切発...
--何が演算子で何が演算子でないかは、nv系言語仕様では規定...
** 構文構成例
-普通の計算。
a=b+c*2;
--「 a = b + c * 2 ; 」
--最初に二項演算子の * が発動して、c*2の結果と置換される...
--「 a = b + 6 ; 」
--次に二項演算子の + が発動して、b+6の結果と置換される。...
--「 a = 8 ; 」
--最後に二項演算子の = が発動して、aに8が代入され、式の値...
--「 8 ; 」
--もう演算子はないので、次の文に制御が移る。
-単項演算子と二項演算子が混ざった例。
a = -1 * +1;
--「 a = - 1 * + 1 ; 」
--単項演算子の+や-は、二項演算子の*よりも優先度を高く設定...
--単項演算子の+や-は、自分の後ろに数か数になりうるものが...
--このルールにより、aには正しく-1が代入されることになる。
-二重のマイナス符号の例。
a = - -b;
--「 a = - - b ; 」
--仮に単項マイナスが左結合だったとしても、左の-は、最初は...
--「 a = - -2 ; 」
--あとは普通に処理されて、aは2になる。
-英字で構成された演算子。記号で構成された変数名。
--「mod」や「and」などの英字で構成されたものも、nv系言語...
--「sin」を演算子としておけば、「y=sin x;」なども可能であ...
-代入方向の逆転。
--「=>」という演算子を定義しておけば、「a + b => c;」とい...
-逆ポーランド記法。
--「<*>」や「<=>」という逆ポーランド記法の演算子があり(...
--また混在も可能である。「a = b c <*>;」
-制御構文について。
--たとえば「if」は関数である。条件が成立した時の { } や不...
if (a == 3) { b = a; }; // 最後の;は必要で省略できない。
if (a < b) then { max = b } else { max = a }; // thenやe...
max = if (a < b) { b } { a }; // ifが値を返すとしたら、...
-for文について。
--forをそれっぽく書くのには限界がある。「for { i = 0 } { ...
--「while { 条件式 } { ... }; 」は問題ない。
--「do { ... } while { 条件式 }; 」は、doを演算子にして、...
--いずれにせよ、何度も評価する条件式は必ず中カッコでくく...
---もしくはdoやwhile演算子が、後続するカッコを中かっこに...
-中かっこでくくられたコード片について。
--これらが関数に渡されるときは、単なる文字列としてソース...
-ほとんどすべての演算子や構文のための関数が、ユーザ関数と...
--優先順位などのつじつまを考えるのは容易ではないかもしれ...
-ifについて。
--if (条件式1) { 文1 } { 条件式2 } { 文2 } { 条件式3 } { ...
--つまりif関数は、引数の数が可変である。中カッコでくくら...
--これは else if が連なったものを表していて、最後の文eはe...
** 機能仕様
-整数型は256ビットの精度を持つ。実数型は8倍精度。
-変数には型がなく、値が型を持つ。ヌル型、整数型、実数型、...
-全ての変数には「リビジョン」という属性があり、代入するた...
--構造体に関しては、メンバ変数が更新されるたびに自身のリ...
-構造体型は、メンバ名をabc.memberと書いてもよいし、abc["m...
** おまけ
-関数の引数として { } のコード片を渡せるという仕様は、Rub...
* こめんと欄
#comment
ページ名: