そもそもコンパイラの中ってどうなっているの? Javaでコンパイラの基礎を理解する(1) 普段、なにげなく使っているコンパイラ。中身を理解すると、プログラミングへの意識が変わり、技術力もつきます! 開発者必見です
SableCCはJavaベースのCompiler Compilerです。 URLはhttp://www.sablecc.org/です。 コンパイラコンパイラは文法構造の定義をもとにソースコードを 解析するコードを生成するものです。Javaでは他にJavaCCなどがあります。 SableCCは以下のような点がJavaCCと違います。 Unicodeベース: Readerを使うことにより、Javaのchar単位で解析している LALR(1) AST(abstract syntax tree)の生成 ASTへのVisitorによる走査: VisitorインタフェースAnalysis.javaを派生するため 文法ファイル中にJavaコードは埋めこまない SableCCは「文法定義ファイル」を読みこんで、実際にその文法で書かれた データを解析するためのJavaソースを生成します。 それらの生成Jav
オブジェクトとクラスの関係について、次のような説明を見かけました(文言の引用ではなくて、檜山による要約)。 オブジェクトとクラスは全体としてツリー構造をしていて、ツリーの末端をオブジェクト、末端以外のノードをクラスという。末端であるオブジェクトは、その親ノードであるクラスのインスタンスと呼び、クラスどおしの親子関係を継承関係と呼ぶ。 うーむ、この説明、ある意味「簡潔でわかりやすい」とも言えるのだけど、ちょっと単純化し過ぎでしょ。 オブジェクトやクラスの概念て、そんなに美しくもなきゃ、整合的でもありません。実用性やら実装上の都合やらでゴチャゴチャですがね。しかし、そのゴチャゴチャが悪いともいえません。ゴチャゴチャを無理に単純化することなく、必然性を持った(幾分は偶発的だけど(苦笑))複雑さとして理解すべきかと思います。 というわけで、メタクラスやレイフィケーション(reification)な
mode with Java Web Start or in an Applet Usage Screenshots Feedback Acknowledgements Related work Lambda Animator is a tool for demonstrating and experimenting with alternative reduction strategies in the lambda calculus. Eager languages reduce arguments before function application. Lazy languages reduce arguments, if needed, after function application. Reductions can also be performed within func
この「Java言語講座」は、あるソフトハウスでの講座を元にして作られている。そのため、「初めてプログラムをするんだけど、Java が流行っているみたいだから勉強してみたい」という人にはまったく向いていない。そのような人のための雑誌・書籍・Webページは山のようにある。→ 裏ページ「Humorous Side of Java」 このページは、Java の Deep Side について筆者が研究した結果がかなり含まれている。また、主として参考にしたJava固有の資料は次の通り。 「The Java 言語仕様」(ゴスリン,ジョイ,スティール、アジソン・ウェスレイ) 「The Java 仮想マシン仕様」(リンドホルム,イェリン、アジソン・ウェスレイ)。これらはSun社自身による、それも開発者自身による最もディープな専門書籍であり、大変役に立つ(というか筆者レベルだとこういう本じゃないと役に立たない
言語Scalaは、EPFL大(仏ローザンヌ)のMartin Odersky教授により開発された、強い型付けをもつ純粋なオブジェクト指向と関数型が理論的にほぼ完全に融合したプログラミング言語です。Scalaは、JVM上で実行されるため、言語内からすべてのJavaクラスが普通に利用可能であり、簡潔で高い表現力とJavaとほぼ同等の実行性能をもっています。 強い型付け言語でありながら型推論機能のおかげで冗長な型宣言が不要であり、Ruby以上にコンパクトなコード記述を許し、GenericやMixin(Trait)等の抽象クラス管理機能、パターンマッチング機能などの簡潔で豊かな表現力と相まって、新世代の実用スクリプト言語としての高い可能性も秘めています。 ○言語Scalaの基本サイト The Scala Programming Language(ダウンロード、ドキュメント充実) http://www
ある浮動小数点数の値に対して、その次に大きく表現可能な浮動小数点数値や次に小さく表現可能な浮動小数点数値との差分を「ulp」(Units in the Last Place)と表す。ulpは、ある値が持つ誤差範囲を表現する際の単位として用いられる。日本では「アルプ」と発音するようである。「ulp」は「丸め幅」とほぼ同義の用語である。 浮動小数点数値の演算結果を「直近の値」で正確に丸めた結果がfであった場合、fに丸める前の元の演算結果は、多くともf ± 0.5 ulpの範囲内であったと考えられる。もし元の演算結果がこの範囲外の値であったのなら、fではない別の値に丸められたはずだと考えられるからである。 ある演算機能の結果が「0.5ulp以内の範囲で正しい」と保証されているのであれば、その演算機能は「正確さ」に対して、有限桁の位取り記数法においてこれ以上にないベストを尽くしていることになる。
なんかゴニョゴニョやってるうちに出来たみたい。 > (+ (call/cc (lambda (x) (x 1) 2)) 3) ==> 4 以下のページなども参考にしつつ、継続スタックを自前で管理することで実現した。継続に対応させるために、プリミティブ関数の実装がとても力業になってしまった。 Schemeを作ろう 第3回 http://www.jah.ne.jp/~naoyuki/Writings/VScheme3.html それと、レキシカルスコープは意外に簡単に実装できた。要するにオブジェクトの値を求める時に、評価するときの環境じゃなくて定義した時の環境を使えばいい。定義する場所と評価する場所が異なるのは関数オブジェクト(==lambda式)の中だけだから、結局は関数に定義した時の環境を持たせておくだけでよくて、わずか数行の書き換えで実現できてしまった。 継続に対応するコードの例 参考ま
What is KMyacc? kmyaccはyaccやbisonと同じLALRパーサージェネレータです。 yaccと互換性があり、生成される表が小さく、ホスト言語としてC以外にJava, JavaScript,Perlでも使うことができます。 News 2006.02.28: きむらさんによるWindows VC++用のパッチ 2006.02.16: version 4.1.4: Java, Perl, JavaScript版のパーサードラ イバのバグを修正。このバグは、ある種の文法で構文解析に失敗し実行時エラー を起こすというもの。C版にはこのバグはない。 2005.10.07: version 4.1.3: Java版に yyparsererror (YYERROR) 及びスタックの自動伸張を実装 2005.07.10: Demonstration program 2005.07.0
What is ANTLR? ANTLR (ANother Tool for Language Recognition) is a powerful parser generator for reading, processing, executing, or translating structured text or binary files. It's widely used to build languages, tools, and frameworks. From a grammar, ANTLR generates a parser that can build and walk parse trees. Terence Parr is a tech lead at Google and until 2022 was a professor of data science /
This webpage was generated by the domain owner using Sedo Domain Parking. Disclaimer: Sedo maintains no relationship with third party advertisers. Reference to any specific service or trade mark is not controlled by Sedo nor does it constitute or imply its association, endorsement or recommendation.
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く