kmizuの日記

プログラミングや形式言語に関係のあることを書いたり書かなかったり。

2016-03-01から1ヶ月間の記事一覧

Macro PEG 0.0.8 リリース

github.com 今回のリリースでは、いわゆる後方参照と呼ばれる拡張をパーザコンビネータに導入してみました。 Introduce backreference as `evalCC` method. · kmizu/macro_peg@91154c8 · GitHub このコミットです。 使い方は gist.github.com こんな感じです…

Kotlinによるパーザコンビネータライブラリ kotbinator 0.1 公開しました

実はリリースしてから、Kotlinのパーザコンビネータライブラリがあることに気づいたのですが、まあ、どうせexperimentalだし、自分ならではの独自路線歩みたいし、気にしないでいくことにしました。 最低限の使い方は、 github.com に書いておきましたので、…

Kotlinのブロックからなる関数定義でreturnを書かなくて良いようにする

Kotlinでは、一つの式からなる関数は fun add(x: Int, y: Int): Int = x + y のように明示的なreturnを必要としません。次のように複数の式からなる関数定義ではreturnが必須となります。 fun printAndAdd(x: Int, y: Int): Int { val k = x + y println(k) …

プロジェクトのバイナリ互換性をうっかり壊してしまわないように、最初に気を付けるべきこと(主にScala)

先日、MiMaの紹介のために、 kmizu.hatenablog.com を書きましたが、それの続編みたいな何か。基本的なことだと思うのですが、色々なScalaプロジェクトがバイナリ非互換な変更の元になる行為を意図せず行っている気がするので、啓蒙のために書いてみることに…

MiMa(Migration Manager)でScalaプロジェクトのバイナリ互換性をチェックする

MiMaは主にScalaライブラリ(Scala本体を含む)のバイナリ非互換な変更をチェックしてくれるライブラリです(おそらくバイトコードレベルの検査なので、Javaプロジェクトでもチェックできると思うのですが試していない)。 元々の経緯としては、Scala 2.9以…

Macro PEG 0.0.7 リリース

今回から、sbt-releaseを使ってリリース作業を半自動化してみました。便利ですね、sbt-release。sbt-sonatypeと組み合わせれば、最初にリリース番号と、次のSNAPSHOTバージョン番号答えるだけで後は全自動。 それはともかく、今回のリリースでは、パーザコン…

Macro PEGとParser Combinatorの関係に関するメモ

特に他の人が読むことを想定して書いていないので、あしからず。Parser Combinatorに関しては、Scala風味の記述で。 0階PEGは、相互再帰的なlazyな値(=> Parser[T])の集まり(式はPrimitiveと基本的なCombinatorで構成される) Primitive 文字列リテラル: "s…

あなたの知らないKotlinのsmart cast(known as Flow-Sensitive Type)

皆さん、Kotlin触っていますか?Kotlinかわいいですよね、Kotlin(どの口がそんなことを言うかって感じですが)。Kotlinにはsmart castという機能があり、安全なキャストができます、というのは不正確で、KotlinはFlow-Sensitive Typeと呼ばれる型システムを…

Macro PEG 0.0.6 リリース

もはやDaily Releaseになってきたので、Daily Buildをスナップショットで提供だけでいいんじゃないかとかそういう気がしてきましたが、まあ練習と思ってしばらく継続していく予定です。 しかし、そろそろsbt-release使ってリリース自動化すべきときですね。 …

Macro PEG 0.0.5リリースしました。

HOPEGからMacro PEGに改名しても、バージョン番号はそのまま上がっていますが、タグがぶつかるのが嫌だったので…。 Release releases/0.0.5 · kmizu/macro_peg · GitHub 主な変更は 文字クラスサポート S = [a-zA-Z_][a-zA-Z0-9_]*; こういう、識別子を表す…

Macro PEGで「一度現れたら再出現しない修飾子」+「相互排他的な修飾子」を表現してみる

gist.github.com とりあえずMacro PEGのコード。 「排他的な修飾子」とは何のことかというと、たとえば、public, private, protectedのように、「一度どれかが出現したら他のものは出現しない修飾子」のことです。最近のプログラミング言語の文法では、この…

Higer Order PEG(HOPEG)をMacro PEGに改名しました

タイトルの通りです。githubのプロジェクト名称、パッケージ名なども既に変更済みです。 github.com 元々、Higer Order PEGおよびFirst Order PEGは、Macro Grammarと呼ばれる、文脈自由文法を拡張して、非終端記号が引数を取れるようにしたものにインスパイ…

Higer Order PEGで「一度現れたら再出現しない修飾子」を表現してみる

gist.github.com とりあえずHOPEGのコードを貼り付けます。表題のような言語をHOPEGで表現する方法ですが、「一度見た修飾子の集合」をどこかに取っておく必要があります。それがModifersの引数AlreadyLookedです。一度どれかの修飾子を読むたびに、AlreadyL…

HOPEG 0.0.3リリースしました。

今度は評価器の修正。exampleを足すとバグが顕在化してきますね…。 github.com

HOPEG 0.0.2リリースしました。

主な変更点は、構文解析器のバグ修正です。結構間抜けなバグを仕込んでしまったものだと思います…。 Fix bug of HOPEGParser. · kmizu/hopeg@a7a72bc · GitHub