Adaのnewの話
http://www.adaic.com/standards/05rm/html/RM-4-8.htmlのallocatorの文法をごらんください。型名のところがsubtype_indicationになっております。
ということは!このようなコードが意味解析はともかくパーサは通るはず!
X := new not null T delta 0.25 digits 10 range 1.1 .. 1.1 + 2.2;
実際にはshift/reduce conflictになりますけどね!
式の優先順位を定義したhttp://www.adaic.com/standards/05rm/html/RM-4-4.htmlをごらんください。allocatorはprimaryとして項扱いになってますよね。足し算は優先順位低いですよね。でもってconstraintの方をみると".."の左右はsimple_expressionで足し算書けますよね。
そう!上のコードは、2通りの解釈ができてしまうのです。
X := new [ not null T delta 0.25 digits 10 range 1.1 .. [ 1.1 + 2.2 ] ]; X := [ new [ not null T delta 0.25 digits 10 range 1.1 .. 1.1 ] ] + 2.2;
orz
ちなみにGNATはnewする型にconstraintなんて付けられませんよ、ええ。