タグ

yaccに関するikeikeikeikeのブックマーク (42)

  • BNF for python.jj

  • Modified Report on the Algorithmic Language Algol 60

  • Modern Lisp Implementations in Pascal, Ruby, Java, Python and C#

    Pascal/Ruby/Java/Python/C# によるモダンな Lisp の小さな実装 2007.4.28 - 2010.10.1 (鈴) 第1回 L2 Lisp: 標準 Pascal によるモダンな Lisp の小さな実装 (1.1 版/Pascal) 2007.4.28 - 2007.5.18 静的スコープ, 末尾呼出しの最適化,マクロを備えた近代的な Lisp を,ISO 7185/JIS X 3008 の標準 Pascal で作成します。 プロトタイプ的な実装ですが,ガーベジコレクションも備えた,まとまったインタープリタです。 第2回 続 L2 Lisp: 従来の約3倍の速さの実現 (2.0 版/Pascal) 2007.6.1 ラムダ式の内部表現とマクロ展開の方法を改良してインタープリタを高速化します。 場合により約3倍の高速性能が得られます。 また,マクロの「変数捕捉」問

  • Porting "Little Lazy Lisp" to almost all the current Pythons

  • GitHub - dabeaz/ply: Python Lex-Yacc

    PLY is a zero-dependency Python implementation of the traditional parsing tools lex and yacc. It uses the same LALR(1) parsing algorithm as yacc and has most of its core features. It is compatible with all modern versions of Python. PLY was originally created in 2001 to support an Introduction to Compilers course at the University of Chicago. As such, it has almost no features other than the core

    GitHub - dabeaz/ply: Python Lex-Yacc
  • プログラミング言語処理

    プログラミング言語処理 講義資料 一覧 全講義資料 pdf版(version 1.1, 108ページ)は、 こちら 言語処理系とは インタプリタとコンパイラ 言語処理系の基構成 例題:式の評価 BNFと構文木 解釈実行:インタプリター コンパイラとは ソースコード 字句解析の基礎:正規表現によるパターンマッチ 字句解析と正規表現 自動字句解析生成プログラム:lex 数式の構文解析:top-down parserの作り方 構文規則 top-down parser の作り方 構文解析の基礎 top-down parserとbottom-up parser 上向き構文解析と還元 演算子順位構文解析法 LR構文解析法 構文解析生成プログラムyacc tiny Cについて tiny Cの言語仕様 tiny C

  • FrontPage - PukiWiki

    2008/01/11からのアクセス回数 616386 竹 浩のページ † このページは、竹 浩(たまねぎおじさん)のWikiページです。twitter: @takepwave 、e-mail: take.pwave@gmail.com 以前のホームページでは、SmartDocで記述して公開していましたが、Wikiを使って 随時追加、更新することにしました。 ↑ 雑誌掲載記事の原稿 † 雑誌に掲載された記事の原稿のリンクを以下に示します。(投稿原稿なので、掲載内容と異なる部分があります、あらかじめご了承下さい)。 WEB DB Press Vol.29 既存機能との融合を既存技術で考えよう(Springの紹介記事) 組み込みプレス VOl.14 ICタグを使った書籍管理システムの構築 Software Design 2009/10 再考シェルスクリプト Software Design 2

  • レンタルサーバ + Webシステム開発 = E-business (JF:Lex-YACC-HOWTO.html)

  • 現在のPyPCASTLのソースコード - Yet Another Ranha

    CodeReposにあげるのとかはどうかと思うので、取りあえずここに張ってみる。 結構大きいので注意(??) 一応PLYというPython Lex Yaccというモジュールが必要ですので、適宜入手してください。どうしたら良いか私には分かりません。 ソースコードを見ていたら気持ちが悪くなったという報告を受けました。その通りです、これは相当に気持ち悪いです。 Pythonレベルでも勿論そうですが、それ以前に無駄があったり定義通りじゃないとかきもい事に成っているのですが、まぁこういうのは出しちゃうのが大事なのでどなたかが新しく実装してくれれば良いんですよね。 後、あれ(forとか)を追加してくれとかいう話が飛ばされたのでforとかを実装しましたが、面倒くさいのでpasteはしません。 import lex from ast import AST import sys tokens = ( 'NU

    現在のPyPCASTLのソースコード - Yet Another Ranha
  • Yacc - Wikipedia

    Yacc(英: yet another compiler compiler、ヤック)はパーサジェネレータの一つである。1970年代にAT&TでUNIX用にスティーヴン・カーティス・ジョンソンが開発した。 概要[編集] 名称[編集] Yacc は yet another compiler compiler(またひとつのコンパイラコンパイラ)に由来する。コンピュータ黎明期には「自動プログラミング」と呼ばれたプログラミング言語処理系の技術の進展の方向として、当時、機械語プログラムを生成するコンパイラの次はコンパイラを生成するコンパイラコンパイラであろう、ということで盛んに研究がされており、そのためコンパイラコンパイラを名乗る研究が他にもあれこれ存在した。 パーサはコンパイラの全てではないので、コンパイラコンパイラと呼ぶには Yacc のようなパーサジェネレータは不足と言えなくもないが、特段意識さ

  • http://members.jcom.home.ne.jp/jintrick/2004/06/26/CbHtmlInlineParser.py

  • http://members.jcom.home.ne.jp/jintrick/2004/06/22/CbHtmlInlineParser.py

  • はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知

    はてなグループの終了日を2020年1月31日(金)に決定しました 以下のエントリの通り、今年末を目処にはてなグループを終了予定である旨をお知らせしておりました。 2019年末を目処に、はてなグループの提供を終了する予定です - はてなグループ日記 このたび、正式に終了日を決定いたしましたので、以下の通りご確認ください。 終了日: 2020年1月31日(金) エクスポート希望申請期限:2020年1月31日(金) 終了日以降は、はてなグループの閲覧および投稿は行えません。日記のエクスポートが必要な方は以下の記事にしたがって手続きをしてください。 はてなグループに投稿された日記データのエクスポートについて - はてなグループ日記 ご利用のみなさまにはご迷惑をおかけいたしますが、どうぞよろしくお願いいたします。 2020-06-25 追記 はてなグループ日記のエクスポートデータは2020年2月28

    はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知
  • Algol 60 in PLY (Python Lex-Yacc)

    PLY (Python Lex-Yacc) で作る Algol 60 処理系 2008.9.26 - 2008.10.17 - 2008.12.8 - 2009.2.17 (鈴) 第1部 1. はじめに 2. Algol 60 とは 2.1 Algol 60 修正報告書 3. PLY の導入 4. 字句解析 4.1 字句解析ルールの記述 5. 構文解析 5.1 構文解析ルールの記述 5.2 Algol 60 生成規則の修正 6. ここまでのまとめ 第2部 7. 名前の解決 8. インタープリタ - 文の単方向リンクと goto 文 9. インタープリタ - 手続きとディスプレイとスタック 10. インタープリタ - 式の中からの大域脱出 11. インタープリタ - call-by-name の実現 12. インタープリタ - のこりの言語要素 第3部 13. インタープリタへの標準関数の組

  • 第9章 速習yacc

    概要 パーサとスキャナ プログラム言語のパーサの書きかたは昔からしつこく研究されてきており、 かなりしっかりした定石がある。よほど変な(または曖昧な)文法でない 限り、定石にのっていけば解決できるものだ。 まず最底辺には文字列を単語(トークンとも言う)の列に切り出す部 分がある。これをスキャナ(scanner)とかレクサ(lexer)と言 う。日語で言うと字句解析器だが、言いにくいのでスキャナと呼ぼう。 スキャナというものが出てくる根底にはそもそも「単語の区切りには空白ある でしょ」という常識がある。そして実際にたいていのプログラミング 言語はそういう仕様になっている。そのほうが楽だからだ。 例えば古いFortranでは空白が意味を持たなかった。つまり空白を入れても 単語区切りとは限らないし、変数の途中で何の前触れもなく空白を挿入したり することもできた。ところが解析が恐ろしく面倒なもの

  • その4 「電卓を作ってみよう」 - C YOTA BANASHI

    電卓が欲しい! PCで文書作成とかしていて、ちょっと電卓が使いたくなることは、 ちょくちょくあります。 Windowsなら、スタートメニューからGUIベースの電卓が起動できますが、 立派なキーボードが付いてるPCで、 マウスで一所懸命ボタンをクリックするのなんて、 冷静に考えるとなんかバカです。 もちろんあの電卓でもキーボードから入力することは出来ますが、 演算子の優先順位は見てくれませんし、括弧を使った計算もできません。 それに、一般に、電卓で何十個もの数値を足す場合などは、 「ああ、入力ミスしてないかなあ」と途中で不安になるものです。 また、途中で入力ミスに気付いた場合、 最後の入力だけクリアして入れ直すことは一応出来るようなんですが、 どこまでどうクリアされてるのかよくわからなくて、 結局最初から入れ直したりしてません? 私は(プログラマの癖に)機械オンチなので、よく最初から入れ直し

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

    yacc/lexとは Cでプログラミング言語の処理系を実装するのであれば、 多くの場合、yaccとlexというツールを使います。 実のところ、Cとyacc/lexで簡単なプログラミング言語を作る、というのは、 以前、「C言語ヨタ話 」で書いた「 電卓を作ってみよう」 の焼き直しになります。yaccとlexの説明もそちらに簡単に書いたので、 そちらを見てください――と言いたいところですが、 まあここでも軽く説明します。 内容的には重複、というかコピペしている部分もありますが。 プログラミング言語の処理系は、通常、以下のような手順を取ります。 字句解析 ソースプログラムを、「字句(トークン)」の並びに分割する処理です。 構文解析 トークンの並びから、解析木を構築する処理です。 この後、Cなどの機械語を吐くコンパイラや Javaのようなバイトコードを吐くコンパイラなら、 「コード生成」という処理

  • Pythonで手抜きScheme(その2) - † houseim.log †

    Python, Ply1日経って昨日のエントリを読み返してみると、Symbolってstrを継承すれば良いよねNumberもintを継承すれば良いよねAddProcedureとかビルドインプロシージャもProcedureの一形態に過ぎないよねSchemeのソースコードを1つの文字列として渡したいよねなんてツッコミたくなってきたので、ちょっと修正する。 SymbolとNumberSymbolは文字列の比較、Numberは四則演算が出来れば良いのだから、Pythonのstrとintが元々持ってる機能をそのまま使えるように、それぞれから継承させる。 class Symbol(str): def eval(self, env): value = env.get(self) while isinstance(value, Symbol): value = value.eval(env) return

  • Pythonで手抜きScheme - † houseim.log †

    Python, Ply前回から既に4ヶ月。その間にJParsecへの熱はすっかりさめてしまった...。 もっとお手軽なものはないかということで、今回はPLY (Python Lex-Yacc)を使ってみた。 まずはASTのみ前回と同じじゃ面白くないからSchemeっぽく書けるようにしてみる。例えば、"(+ 1 2 3)"と入力したら"6"と出力される感じ。で、そのための土台となるASTを組み立てる部品を用意する。PLYの出番はまだ。 # シンボル class Symbol: def __init__(self, key): self.key = key def __str__(self): return self.key def eval(self, env): value = env.get(self) while isinstance(value, Symbol): value = v

  • PLY (Python Lex-Yacc)

    原文 Documentation version: $Header: /cvs/projects/PLY/doc/ply.html,v 1.3 2004/05/27 17:30:56 beazley Exp $ PLY Version: 1.5 目次 Introduction PLY概要 Lexの例 Lex実装ノート 基的なパージング yaccの例 文法規則関数の結合 空生成規則 曖昧文法を扱う parser.out ファイルについて 構文エラーの処理 行番号の追跡 ASTの構築 Yacc 実装ノート パーサとLexer State Management Pythonの最適化モードを使用する 次にすべきこと Introduction PLYはポピュラーなコンパイラ構築ツールであるlexとyaccのピュアPython実装である。この実装は、先人の