タグ

DSLに関するtetsuzinのブックマーク (5)

  • F# vNext は何が "ヤバい" のか: Monadic Programming の新時代 - Qiita

    .NET 5.0 が発表されて F# 5.0 の機運も高まってきた今日この頃ですが,型クラスの orphan instances が作れるようになるやつとか,applicative functors 用のシンタックスとか,ジェネリック等価判定・比較の高速化とか,どれも便利で面白そうだけど最近あんまり動きが見られないなあ,と思いながら Candidate for F# vNext を眺めていたところ,そんなアンニュ〜イな気分を根底から吹き飛ばすヤバい機能が実装されつつあることが先日判明し,わたしは今,冷静さを欠いています. その機能とは,これです. [WIP, RFC FS-1072] task and state machine support by dsyme This inserts a heavily modified (but semantically almost complet

    F# vNext は何が "ヤバい" のか: Monadic Programming の新時代 - Qiita
  • 型プロバイダー(TypeProviders)のちょっとしたアレコレ - Bug Catharsis

    一応、型プロバイダー(TypeProvider)のとりとめもない話 の続き。 ちょっと草植えときますね型言語Grass型プロバイダーを作った後、少し思い違いをしていた事に気付いたのが事の発端。この記事では、FsBulletML.TypeProvidersを作成する過程で得た、型プロバイダーについてのちょっとしたアレこれについて書いてみる。 オレは型プロバイダーに対する思い違いをしていた(雑魚) FsBulletMLという弾幕記述言語ライブラリを作っています。このライブラリでは、弾幕記述言語BulletML(XML形式等)を読み込んで弾幕を表現する判別共用体(内部DSL)の型を生成するということをやっています。構想の段階で BulletML(XML形式等) に判別共用体(内部DSL)の型を付ける型プロバイダーの提供も考えていたが、型プロバイダーでは判別共用体を作ることができないという理由から

    型プロバイダー(TypeProviders)のちょっとしたアレコレ - Bug Catharsis
  • FParsecで遊ぶ - 2つのアンコール

    この記事は、F# Advent Calendar 2011 6日目の記事です。 構文解析に使うライブラリはたくさんありますが、今回はFParsecを取り上げます。 FParsec は Haskell の Parsec というパーサコンビネータの F# 実装です。 僕の考える文法 F#を使っていて、「F#の文法じゃ僕の思うDSLを表現できない」って思う事が良くありませんか? 内部DSLを頑張るのも結構ですが、どうしても格好悪くなってしまいますよね。 そういう時は、迷わず外部DSLを作ってしまいましょう。 そして、DSLの文法を考えているとき、どうしても実装したい機能が一つありますよね。F#にもあるオフサイドルールです。 今時、閉じタグ、閉じ括弧なんてかっこ悪い! でも、オフサイドルールって実装するのが面倒そうじゃないですか? どうやって作ればいいのでしょうか? 例題 こういう入力を、 par

    FParsecで遊ぶ - 2つのアンコール
  • C#で書かれたパーサージェネレーターSpracheを使ってみた - tuedaの日記

    この間見つけたSpracheを試してみた。 SpracheはBison/Flexなどと同じ自分だけのDSLを作るためのパーサーを作るライブラリ。 この手のパーサーを1から書くのは非常に手間暇かかる作業で通常はやるべきではない。 (ただし職のコンパイラ書きを除く) SpracheはC#のみで書かれC#自体の強力さと相まって非常にシンプルにDSLをパースするクラスを作成できる。 ここでは試しにkey = value形式で書かれたファイルをパースする。 あまりにつまらない例だがゲームのコンフィグファイルとかこれで十分なことが多い。 ↓パースしたい文字列。 speed = 300 health = 100 weapon = 20 ↓パース後の値を保存するクラス。 最終的には上の例だとこれのインスタンスが3個取得できればいい。 public class Property { public stri

  • Minimal XML DSL | F# Snippets

    This snippet provides a very small internal DSL for creating and querying XML using the underlying XLinq classes. DSL for XML literals let (!) s = XName.Get(s) let (@=) xn value = XAttribute(xn, value) let (@?=) xn value = match value with Some s -> XAttribute(xn, s) | None -> null type XName with member xn.Item with get([<ParamArray>] objs: obj[]) = if objs = null then null else XElement(xn, objs

  • 1