FrontPage  Index  Search  Changes  RSS  Login

かけはし文法

かけはし文法構想中

文法メモ

コメント

  •  #一行コメント
  •  { ブロックコメント }
一行コメントは # 以降改行まで
ブロックコメントは 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とかそっち向きにつかうなら要るかな。(伊勢)
→パフォーマンス的にそっち方面に耐えられるのかな……(しろくろ)

メソッド呼び出し

  • オブジェクト メソッド名:引数1:引数2:〜:引数N。
メソッド名を先に書く方式。
カメ 歩く 100。 みたいな。
  • オブジェクト メソッド名1:引数1:引数2:〜:引数N メソッド名2:引数1:引数2:〜:引数N、〜。
スペースで繋いで foo.bar().baz(); と同じように。ストリーム送信。

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

関数呼び出し

  • 関数名:引数1:引数2:〜:引数N。
基本的にメソッド呼び出しと同じ形式。

それ

  • それ
それ記法。$_

→それ重要。

もし(ifStatement)

  • もし expression なら blockStatement。
  • もし expression なら blockStatement そうでないなら blockStatement。
”expression なら blockStatement”の組は1つの if 文に対し複数記述可能。

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

くりかえし(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
Last modified:2007/11/15 03:18:57
Keyword(s):
References: