2009-01-01から1年間の記事一覧

式(Expression)と文(Statement)

式と文の違いは知っておくといろいろ役立ちますので、ご紹介したいと思います。プログラミング言語の構文の要素は、式(Expression)と文(Statement)に分類されます。プログラマであれば、用語としては把握していなくても、プログラミングの実践の中で、式と文…

拡張メソッドのターゲットにIList(T)とIEnumerable(T)のどちらを選ぶか?

.NET Frameworkのクラスライブラリでは、IEnumerable(T)に対して多数の拡張メソッドが用意されています。これは非常に便利です。ここで自作の拡張メソッドを作成する場合に悩むことがあります。集合に対する拡張をしたい場合、IEnumerable(T)向けに拡張メソ…

拡張メソッドは対象とする型の提供者以外は作成するべきではありません

非常に魅惑的な拡張メソッドですが、そのリスクについてはあまり語られていないように思えたので(百も承知だから誰も書いてないだけかもしれません) 、書いてみます。拡張メソッドとは、C#3.0、VB9.0で取り入れられた言語の機能で、詳細は下記のリンクを参照…

数式を解くプログラム その6(最後) - 構文解析3

id:yone-ken:20090223:p1 の続きです。さっそく、Expressionクラスから見ていきます。 class Expression : Node { public override void Evaluate(Context<Token> context) { Node left = new Term(); left.Evaluate(context); this.Value = left.Value; while (tru</token>…

数式を解くプログラム その5 - 構文解析2

id:yone-ken:20090220:p1 の続きです。再度、拡張BNFによる構文定義を確認します。 ::= ('+' )* | ('-' )* ::= ('*' )* | ('/' )* ::= '(' ')' | '+' | '-' | 構文解析を実装するに当たり、どんなクラスが必要でしょうか?また、そのクラスにはどんなメンバ…

数式を解くプログラム その4 - 構文解析1

id:yone-ken:20090219:p1 の続きです。例によって一般的な説明はwikipedia:構文解析を参照して頂くとして、「数式を解くプログラム」の場合の構文解析を具体的に説明します。そのために以前に定義した文法の抜粋を載せます。 ::= ('+' )* | ('-' )* ::= ('*'…

数式を解くプログラム その2 - 字句解析1

id:yone-ken:20090218:1234954345 の続きです。前回記載した数式の文法を踏まえた話をしますので、必要に応じて参照してください。「数式を解く」ためにはまず字句解析という処理が必要です。 wikipedia:字句解析 例によって細かい話は上記を参照して頂くと…

数式を解くプログラム その3 - 字句解析2

id:yone-ken:20090219:1235007962 の続きです。前回用意したTokenKind列挙型、Tokenクラスを使って、字句解析処理を実装します。字句解析を行うクラスはTokenizerクラスと命名します。そして、字句解析クラスのインターフェースを規定するクラスとしてContex…

数式を解くプログラム その1 - 概要

下記の掲示板での質問に触発されて、私も 数式を解くプログラムをC#3.0で作ってみました。■電卓 ((1+2)3)カッコの入れ子http://bbs.wankuma.com/index.cgi?mode=al2&namber=32500数式といっても対応するのは、四則演算(+, -, *, /)と丸括弧による演算の…

C#のメソッド名の制限事項

先日、WPFをまねてTransformクラスとその継承クラスRotateTransform、ScaleTransform、SkewTransform、MatrixTransform、TransformGroupクラスをC#のWindows Formsアプリケーションのプロジェクトで作ろうとしたときのこと。Transformクラスを抽象クラスとし…

ブログはじめました。

去年の年始からブログをやろうやろうと1年の目標に挙げていました。結局、去年は目標を果たせず、今の今まで実践できていませんでしたが、いよいよブログを始動します。このブログでやりたいこと。 ジャンルを問わず、プログラミングに関することで私が興味…