Big Sky :: プログラミング言語の作り方(2) Big Sky :: プログラミング言語の作り方(3) Big Sky :: プログラミング言語の作り方(4) Big Sky :: プログラミング言語の作り方(5) github の trending を見てたら面白い物を見つけた。 orangeduck/BuildYourOwnLisp - GitHub Learn C and build your own programming language in under 1000 lines of code! https://github.com/orangeduck/BuildYourOwnLisp 手順にそってC言語で lisp を実装する手順を見せるという物なのだが、その教材の一部としてパーサのコードが含まれている。 このパーサ部分だけ別のプロジェクトとして外出しされている。 o
ロッズリーン、はっじまらないよ~。というわけでMicrosoft “Roslyn” CTP、Compiler as a Service。NuGet - Roslynでも手に入るので、サンプル類やC# Interactiveとかはなしで、とりあえずScriptingやCompilerを触ってみたい、ということなら、お手軽です。しかし、まあ未実装も少なくなく、まだまだ先は長そうな雰囲気ではある。今すぐ欲しいのに!切実にC# Parserが!というわけで、今日はその良き代替となる(かもしれない)NRefactoryを紹介します。 NRefactoryはNuGet - NRefactoryからも入ります。verは5.0.0.4、「This is an alpha release. Expect bugs and breaking changes in the future.」とのことで、こちらも
Demo Static Analysis Online Parsing Syntax Validator Operator Precedence Regex Collector Dynamic Tracing Function Instrumentation Code Transformation Source Rewrite Minifiy & Obfuscate Editing Tools Identifier Highlight Rename Refactoring Autocomplete Project Git Repository Continuous Integration Mailing List Issue Tracker QA Unit Tests Benchmarks Suite Speed Comparison Module Loading Coverage Ana
C++ でlexer/parserをかくなら re2c+lemon がオススメな件 yacc や lex をつかっていても「なんかよくわからんけどうごく」という状態になりがちだったり、グローバル変数にまみれたりしがちだが、re2c + lemon だとそのへんがすっきりする。 レキサを以下のようにかく。yyfill を自前でかかなければいけないのがちょっと面倒だが、このようなクラスを手軽にかけるのはやはり便利である。flex ではこうはいかないのだ。 #ifndef CALC_SCANNER_H_ #define CALC_SCANNER_H_ #include <stdio.h> #include <string.h> #include <string> #include <sstream> #include <vector> #include <iostream> #include <
このページの目的は、「独自のプログラミング言語を作る」ことです。 「プログラミング言語を作る」というのは、 やったことのない方からすれば、ずいぶん無謀な目標に見えるのかもしれません。 でも、いくつかの基礎知識さえ修得すれば、技術的には、 実はそんなに難しいものでもありません。 だったら、ひとつぐらい作ってみたいと思いませんか? なにしろプログラミング言語を作るなんて、 いかにもかっこ良さげじゃないですか。 私は作ってみたいと思いました。だから作ります。 プログラミング言語なんてもう山ほどあるのに、 今さら新しい言語なんて付け足して何をしたいんだよ! などというツッコミは入れてはいけません。 「なぜプログラミング言語なんか作るんですか?」 と聞かれたら、その答は そこにyaccがあるからだ。 で充分だろうと私は思います(yaccが何かは後述します)。 というわけで―― ただ私なんぞが新言語を
ParserApi::PartialPreParse から PreParse の結果のデータ構造を見ていく。 DoPreParse の結果は ParserRecorder に記録されるようだ。Parse の結果に影響を与える各種フラグを見た後に Parser の本体へ。 FunctionLiteral* Parser::DoParseProgram(Handle<String> source, bool in_global_context, StrictModeFlag strict_mode, ZoneScope* zone_scope) { void* Parser::ParseSourceElements(ZoneList<Statement*>* processor, int end_token, bool* ok) { かを見て Scope を作る。 scanner が Toke
Bison This manual (10 September 2021) is for GNU Bison (version 3.8.1), the GNU parser generator. Copyright © 1988–1993, 1995, 1998–2015, 2018–2021 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Se
Parse::RecDescentを一回ぐらい使っておこうかなということで使ってみた。 書いてみたのは .iniファイルのパーサです。たくさんモジュールがあるし、 実際に使う気があるわけでもなく、ただ練習ということで。 iniの仕様 書くにあたってわかったのですが、.iniファイルって厳格な仕様があると いうわけではないんですね。なんで、Config::INIの PODに書いてある BNFを参考に、若干簡略化したものになってます。文字列の正規表現はいい加減です。 コード #!/usr/bin/env perl use strict; use warnings; use Config::INI; use Parse::RecDescent; ## for debug #$::RD_HINT = 1; #$::RD_TRACE = 1; my $grammer =<<'__GRAMMER__'
ApacheのログをparseしたいがCPANを見てみるとなんかぴったりなのがない。"Apache Log" で検索した限り、LoggerはいっぱいあるんだけどParserがビミョー。なぜ。見付かったのは以下ふたつのみ。 Apache::ParseLog - search.cpan.org ファイルを全部読み込んで集計までやってくれるらしい、が、そんなのいらない そもそもログ行に対して動作するというよりApacheの設定ごと処理するようなもので、モジュールというか解析プログラムの様相 ApacheLog::Parser - search.cpan.org combined 形式のみにマッチする 独自書式どころか common とか %D つきとかでも失敗するのが悲しい 特に高速ということもない Parse::AccessLogEntry - search.cpan.org (そういえば試し
blogめったに書いてない... 2.5年で110件... 前々からJSのScannerを読んだりするのが楽しかったのですが, id:miya2000 さんからの「commentを削除するprogram」という話が出たときに, 結局JSのlexerというものは単体では生成できずParserと密着している(主にRegExpとRegExpとRegExpのせいです)ということがわかり, 自分でも書きたいという考えが浮かんできてC++でずっと書いていました. AST構築までできて, jqueryなどをparse成功 + json形式のtreeにシリアライズする程度になったのですが, せっかくなのでLLVMへのbridgeとか検討しています. LLVMおもしろいー. Constellation/iv · GitHub で, Constellation's gist: 387832 — Gist くら
http://www.cs.queensu.ca/~thurston/ragel/ Ragel は、ステートマシンコンパイラの一種で、パーサジェネレータとして使われることが多い。その実例として、Mongrel や Hpricot がある。 パーサジェネレータとして Ragel を使う利点は、以下の通り。 プロトコルやデータフォーマットを正確にパーズできる その結果、セキュアなソフトウェアが作れる 外部ライブラリに依存しないコードができる ものすごく速い 特に HTTP server など、速度が求められるサーバを書くときに便利なことがわかる。 参考: http://www.zedshaw.com/tips/ragel_state_charts.html ここでは、簡単な例としてドメイン名のパーザを作ってみよう。ホスト言語は C で。 まずは、Ragel 6.0 をインストールする。 OSX
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く