タグ

compilerに関するsiroccoのブックマーク (22)

  • コンパイラの構造を解説 | Shinta's Site

    はじめに 久しぶりに Aho氏, Sethi氏, Ullman氏の書いた Compilers(レッド・ドラゴン・ブック)という書籍を目にしたので、昔、コンパイラを作った時の事を思い出しながらコンパイラについてまとめてみました。 Translator (翻訳) Translatorとは、一つのプログラミング言語(Source Language: 原始言語)で書かれたプログラムを入力として取り、別の言語(Object Language or Target Language: 目的言語)のプログラムとしてつくり出すプログラムです。 原始言語が FORTRAN, C, Pascal などの高水準言語で、目的言語がアセンブリ言語や機械語といったような低水準言語である時、そのような Translator をコンパイラ(Compiler) と呼びます。また、原始言語がアセンブリ言語で目的言語が機械語であ

    sirocco
    sirocco 2015/05/27
    コンパイラ。抽象構文木を作って、それを評価すればプログラムは実行される。
  • clang+llvmでさりげなくすごいコードが生成されていた話。 - 組み込みの人。

    先日llvm 3.3がリリースされました。aarch64(arm 64bit)のコードが生成できるようになったということなので、ソースからビルドして遊んでいたのですが、さりげなく凄く最適化されたコードが生成されているのに気がつきました。aarch64だと今は実行して確認できる環境が手元に無いので、普通のarmv7-aで同じことを試しました。 ここで使ったコードとその結果はgistに貼りました。 https://gist.github.com/tetsu-koba/5835724 ソースコード int sum(int x) { int sum = 0; int i; for (i = 1; i <= x; i++) { sum += i; } return sum; } 1からnまでの総和を求める関数です。1から100までの総和が5050なのはガウス少年の逸話で有名ですね。 gcc 4.8.

    clang+llvmでさりげなくすごいコードが生成されていた話。 - 組み込みの人。
    sirocco
    sirocco 2013/06/23
    ガウス少年は先生から1から100まで和を求める計算問題を出されて、101になる組み合わせが50個できるので5050と答えたそうですが、コンピュータもいちいち全部足し算しないという話。
  • 『ふつうのコンパイラをつくろう』サポートページ

    章目次 第1章 コンパイラ作りを初めよう 第2章 C♭とcbc 第1部 ソースコードの解析 第3章 構文解析の概要 第4章 字句解析 第5章 JavaCCによるパーサの記述 第6章 構文解析 第2部 抽象構文木と中間表現 第7章 JavaCCのアクションと抽象構文木 第8章 抽象構文木の作成 第9章 意味解析(1)参照の解決 第10章 意味解析(2)静的型チェック 第11章 中間表現への変換 第3部 アセンブリコードの生成 第12章 x86アーキテクチャの概要 第13章 x86アセンブラプログラミング 第13章 関数呼び出しと変数 第15章 式と文のコンパイル 第16章 スタックフレームの割り当て 第17章 最適化の手法 第4部 リンクとロード 第18章 オブジェクトファイルの生成 第19章 リンクとライブラリ 第20章 プログラムのロード 第21章 位置独立コードの生成 第22章 書を

  • プログラミング言語を作る

    このページの目的は、「独自のプログラミング言語を作る」ことです。 「プログラミング言語を作る」というのは、 やったことのない方からすれば、ずいぶん無謀な目標に見えるのかもしれません。 でも、いくつかの基礎知識さえ修得すれば、技術的には、 実はそんなに難しいものでもありません。 だったら、ひとつぐらい作ってみたいと思いませんか? なにしろプログラミング言語を作るなんて、 いかにもかっこ良さげじゃないですか。 私は作ってみたいと思いました。だから作ります。 プログラミング言語なんてもう山ほどあるのに、 今さら新しい言語なんて付け足して何をしたいんだよ! などというツッコミは入れてはいけません。 「なぜプログラミング言語なんか作るんですか?」 と聞かれたら、その答は そこにyaccがあるからだ。 で充分だろうと私は思います(yaccが何かは後述します)。 というわけで―― ただ私なんぞが新言語を

  • 中田育男著「コンパイラの基盤技術と実践」: ホットコーナー

    ブログ(iiyu.asablo.jpの検索) ホットコーナー内の検索 でもASAHIネット(asahi-net.or.jp)全体の検索です。 検索したい言葉のあとに、空白で区切ってki4s-nkmrを入れるといいかも。 例 中村(show) ki4s-nkmr ウェブ全体の検索 ASAHIネット(http://www.asahi-net.or.jp)のjouwa/salonからホットコーナー(http://www.asahi-net.or.jp/~ki4s-nkmr/ )に転載したものから。 --- 日のコンパイラの権威、中田先生の新刊が出てますね。まだ、買ってませ んが、速報ということで。^^; http://www.amazon.co.jp/exec/obidos/ASIN/4254121733/showshotcorne-22/ コンパイラの基盤技術と実践―コンパイラ・インフラスト

  • コンパイラの作り方 (詳解)

  • Javaでコンパイラの基礎を理解する

    そもそもコンパイラの中ってどうなっているの? Javaでコンパイラの基礎を理解する(1) 普段、なにげなく使っているコンパイラ。中身を理解すると、プログラミングへの意識が変わり、技術力もつきます! 開発者必見です

  • http://www.lang-hasegawa.co.jp/doc/c_compiler/index.html

  • B3 OS/Programming

    シラバス コースは、プログラミングの基について、ひととおりの技術を学び終えた受講者を対象とする。コースの目的は、実際のソフトウェアを開発する際に、具体的にどのようにプログラムを設計し、またどのように OS の機能を利用していけばよいか、感覚をつかんでもらうことである。このため、コースは講義中心ではなく、いくつかのソフトウェアの作成演習をとおして、そのソフトウェアのプログラムはなぜそのように設計されているのか等を考えてもらう。 1. 簡単な C コンパイラ 言語仕様を簡略化したCコンパイラを作成し、言語処理系の基構成を学ぶ。また関数呼び出しや配列参照など、C言語の各基機能が実際にどのような機械語に変換されていくのかを学ぶ。 実際に作成する処理系は2つで、まずはじめに字句解析の練習として、ごく簡単なLispインタプリタを作る。 その後、構文解析、コード生成の演習のため、C言語風の手続

  • Lecture Notes

    1-5 構文解析2 前回は BNF による文法の定義の仕方を説明した。今回は、いよいよ yacc を使って構文木を組み立てる。 構文木 一般に元のプログラムをそのまま木構造に変換しものを、parse tree (構文木)という。Parse tree の場合、元のプログラムの token は省略されることなく、全て木に含まれる。一方、token の中には人間の見やすさのためや、文法をあいまいでなくするために存在するものもあり、そのような token は構文解析が済んだ後はコンパイルには不要である。 以降の処理に必要な token だけを残し、parse tree をより簡単にしたものを、abstract syntax tree (AST: 抽象構文木)という。構文解析する際、parse tree を作ってから、AST に変換してもよいが、コンパイルには parse tree は不要なので、今

  • 「構文木」に関連した写真、動画、ブログ、2chスレッド - はてなRSS

  • Ruby .NET

    Programming Languages and Systems.

  • Basics of Compiler Design

    I have taught an undergraduate compilers course for over a decade. In the last many years, I have used my own textbook "Basics of Compiler Design", which I have decided to make available online. Permission to copy and print for personal use is granted. Differences between editions Each new edition has fixed errors and rephrased some explanations. Additionally, the 2008 edition added a chapter abou

  • Javaでコンパイラの基礎を理解する 第1回そもそもコンパイラの中ってどうなっているの? (1/2) - @IT

    プログラミング言語処理系の実装 Ajaxなどによりスクリプト言語のJavaScriptの良さが見直されたり、Railsの出現によりプログラミング言語Rubyへの注目度が高まったりしています。これだけプログラミング言語が注目されるようになってくると、独自のプログラミング言語を作成したいと考える開発者も増えてきていることかと思います。 コンパイラ作成を勧める3つの理由 Javaなどのプログラミング言語を使えるようになって、自分が作りたいプログラムを自由に作成できるようになってくると、既存のソフトウェアでも簡単なものを自作してみたくなるものです。せっかくプログラムを組めるようになったのですから、いろいろと自分で作ってみたいと思うのは当然です。中でも、プログラミング言語処理系は一度は作成してみたいと思うでしょう。 一般のコンピュータ利用者と違って、開発者は日ごろからコンパイラやインタプリタを使って

    Javaでコンパイラの基礎を理解する 第1回そもそもコンパイラの中ってどうなっているの? (1/2) - @IT
  • Redirection

    This page has moved to http://bellard.org/tcc/. You will be redirected to it in a few seconds. Update your bookmarks !

  • レッドハット マガジン 64ビットコンピューティング: 32ビット環境での共存

    Guilt is usually considered a negative emotion, but by steering it well, you can achieve surprising success.

  • 再帰降下法

    第 12章 の 12.2 節において, 後置記法(逆ポーランド記法)で書いた数式を計算するプログラムを 解説した. このプログラムはスタックの利用により後置記法の式の計算を実現している. この節では, 中置記法の数式を後置記法へ変換する プログラムを開発する. 中置記法は演算子を真中におく, おなじみの式の記述方法である. たとえば は中置記法の式であり, これを後置記法に変換すると, たとえば 2 3 45 2 + * + となる. 変換するプログラムを書く前にどのような ``文法'' の 中置記法の式を入力として認めるのか きちんと定義する必要がある. 計算機の世界で意味する文法というのは, 英文法の意味する文法とは違い, 曖昧さが入る余地はゆるしていないし, 人間が人工的に定義する. 文法は BNF (Bakus-Nauer) 形式や構文図を用いて定義する. われわれの, ``式''

  • 【インフォシーク】Infoseek : 楽天が運営するポータルサイト

    日頃より楽天のサービスをご利用いただきましてありがとうございます。 サービスをご利用いただいておりますところ大変申し訳ございませんが、現在、緊急メンテナンスを行わせていただいております。 お客様には、緊急のメンテナンスにより、ご迷惑をおかけしており、誠に申し訳ございません。 メンテナンスが終了次第、サービスを復旧いたしますので、 今しばらくお待ちいただけますよう、お願い申し上げます。

  • 電卓のアルゴリズム

    電卓シミュレータ −演算子の優先順位を考慮して数式を計算するには− 中置記法の式を逆ポーランド記法(後置記法)に変換後,計算を行う。 電卓シミュレータのダウンロード(2004.11.19) 画面のイメージ 1.計算式の入力 2.逆ポーランド記法に変換 3.計算 [1] 中置記法から逆ポーランド記法への変換アルゴリズム 1) 式eからtokenを取り出す 2) すべてのトークンを処理し終えたら スタックに残ったすべての演算子をキューに入れ,キューを返す(終了) 3) tokenが数字のとき tokenをキューに入れ,式の残りを再帰的に処理 4) (tokenが演算子で) 4-a) スタックが空なら tokenをスタックに積んで,式の残りを再帰的に処理 4-b) token(演算子)の優先度 > スタックトップの演算子の優先度 なら tokenをスタックに

  • サポートページ:スモールコンパイラの制作で学ぶプログラムのしくみ

    ダウンロード 書掲載コードのソースを以下からダウンロードできます。どうぞご利用ください。 第2章 基 Cell.java CellG.java CellK.java CellV.java 第3章 拡張 Cell.java CellG.java CellK.java CellV.java ※上記をまとめてダウンロードされる場合はこちらをご利用ください。 source.zip 第4章 携帯電話 source_chap4.zip お詫びと訂正(正誤表) P.13 表1.1 誤