FrontPage  Index  Search  Changes  RSS  Login

かけはしWiki - かけはし文法 Diff

  • Added parts are displayed like this.
  • Deleted parts are displayed like this.

!かけはし文法構想中

!文法メモ

!!コメント

* #一行コメント
* { ブロックコメント }

一行コメントは # 以降改行まで
ブロックコメントは Pascal&Delphi のパクリです

!!数式(expressionStatement)

*1+2。1−2。1×2。1÷2。

式の終わりは ";" か "." か。後者なら "。" と接合性取れるけど小数点が表現できない。
"。"→";" に変換して、式の終わりは "。" か ";" とするのが一番素直だとおもう。

*1<2≦3。

左結合の比較演算子 (<>≦≧) は、真なら右の値を返す。
たとえば1<2なら2を返す。これは1<2<3を書けるようにするため。
偽ならば False を返す。

これらの数式は、その結果を it 変数(それ)に代入する。

!!!演算子の優先順位

|| 高 || : || 関数呼び出し時に引数を連結する演算子
||   || + − ! () || 単項+、単項−、否定、式の入れ子
||   || × ÷ % ¥ || 乗算、除算、剰余、小数点除算
||   || + − || 加算、減算
||   || < > ≦ ≧ || 比較演算子
||   || == <> || 等号、不等号
||   || & || 論理積
||   || ^ || 排他的論理和
||   || | || 論理和
|| 低 || = || 代入

等号の「==」に微妙な違和感がある。
けど「=」にしたら、代入は「:=」とか「←」になる?

「等号、不等号」と「比較演算子」の優先順位は同じにするべきかもしれない。
変数1==変数2≦変数3==変数4 みたいな。

代入演算子の数は増やすか増やさないか未定。いたずらに増やしても混乱するだけかもしれない。
シフト演算子、ビット演算子は今のところ導入する予定無し。
**のような、累乗を計算する演算子は入れるかどうか迷っている。

→累乗は別に良いんじゃないだろうかとか一瞬思った。3DCGとかそっち向きにつかうなら要るかな。(伊勢){{br}}
→パフォーマンス的にそっち方面に耐えられるのかな……(しろくろ){{br}}

!!!メソッド呼び出し

*オブジェクト メソッド名:引数1:引数2:〜:引数N。

メソッド名を先に書く方式。
カメ 歩く 100。 みたいな。

*オブジェクト メソッド名1:引数1:引数2:〜:引数N メソッド名2:引数1:引数2:〜:引数N、〜。

スペースで繋いで foo.bar().baz(); と同じように。ストリーム送信。

→コロンでつなぐの、なんか気持ち悪いなあ(伊勢){{br}}
→「、」でもOKで考えてる。「、」と「:」が等価とか(しろくろ){{br}}

!!!関数呼び出し

*関数名:引数1:引数2:〜:引数N。

基本的にメソッド呼び出しと同じ形式。

!!!それ

*それ

それ記法。$_

→それ重要。{{br}}

!!もし(ifStatement)

*もし expression なら blockStatement。
*もし expression なら blockStatement そうでないなら blockStatement。

”expression なら blockStatement”の組は1つの if 文に対し複数記述可能。

→「そうでないなら」より「でないなら」のほうが意味も通って短いのでこっちを推したい(伊勢){{br}}
→「でないなら」採用します(しろくろ){{br}}

!!くりかえし(whileStatement)

*くりかえし expression blockStatement。

つまり while だけど、”くりかえし”以外に良い日本語はあるだろうか。

!!関数定義(FunctionDeclare)

*「 Statements 」
*「:引数1:引数2 Statements」

匿名関数の生成にまつわる文法が一番の悩みどころ。

----

!文法

CompilationUnit
     : StatementAndSemicolon* EOF
StatementAndSemicolon
     : Statement SEMICOLON
     | Statement
Statement
     : BlockStatement
     | IfStatement
     | WhileStatement
     | ExpressionStatement
     | EmptyStatement
EmptyStatement
     : SEMICOLON
IfStatement
     : IF IfCondition*
     | IF IfCondition* ELSE BlockStatement
IfCondition
     : Expression THEN BlockStatement
WhileStatement
     : WHILE Expression BlockStatement
BlockStatement
     : LEFTBRACKET Statement* RIGHTBRACKET
ExpressionStatement
     : LeftValue EQUALS Expression
     | Expression
Expression
     : FuncCallExpression
FuncCallExpression
     : OrExpression (COLON OrExpression)*
OrExpression
     : XorExpression (OR XorExpression)*
XorExpression
     : AndExpression (XOR AndExpression)*
AndExpression
     : EqualsExpression (AND EqualsExpression)*
EqualsExpression
     : ComparisonExpression (EqualsOperator ComparisonExpression)*
EqualsOperator
     : EQUALS | EQUALSEQUALS | NOTEQUALS
ComparisonExpression
     : AdditionalExpression (ComparisonOperator AdditinoalExpression)*
ComparisonOperator
     : LESSTHAN | LESSTHANEQUALS | GREATERTHAN | GREATERTHANEQUALS
AdditionalExpression
     : MultipleExpression (AdditionalOperator MultipleExpression)*
AdditionalOperatpr
     : PLUS | MINUS
MultipleExpression
     : UnaryExpression (MultipleOperator UnaryExpression)*
MultipleOperator
     : STAR | SLASH | PERCENT | YEN
UnaryExpression
     : UnaryOperator UnaryExpression
     | LEFTPAREN Expression RIGHTPAREN
     | Literal
UnaryOperator
     : PLUS | MINUS | EXCLAMATION
Literal
     : INTEGER_LITERAL
     | STRING_LITERAL
     | IDENTIFIER
     | TRUE
     | FALSE
     | NULL