SlideShare a Scribd company logo
Scalalr:
Scala上でいい感じの見た目の

DSLを作るためのライブラリ
• Twitter: @phenan
• Github: phenan
• 今日の話: 面白いライブラリを作ったので紹介します
こんな感じでDSLを定義する
JValue

のDSL
こうかいて
これをよびたい
JValue

のDSL
こうかいて
これをよびたい
カンマくぎり
JValue

のDSL
JValue

のDSL
JSONのObjectの
かきかた
Objectのそれぞれの
プロパティ
こんな感じで使える!
こんな感じで使える!
これ
これ
こんな感じで使える!
これ
こんな感じで使える!
これ
括弧がいっぱいある
括弧は言語の境界を表す
JSON DSLに

Scala value

をわたしている
括弧は言語の境界を表す
Scalaに

JSON DSLを

わたしている
1ライナーのDSLなら()はいらない
注目してほしい点
Scala でこんなの書けたっけ?
Scala でこんなの書けたっけ?
[a, b] ?
Scala でこんなの書けたっけ?
[a, b] ?
: のあとは

タイプでは?
Scala でこんなの書けたっけ?
[a, b] ?
: のあとは

タイプでは?
{a, b} ?
コンパイラ拡張?
いいえ、

素のScalaです
Font Ligature
実は…
Font Ligature
ValidなScalaコード
Scalalr
• 専用フォントScaligの利用を前提としたコードを生成する
• DSLの見た目を自由に変えられるよ!やったね!
• コンパイルに時間がかかるのがちょっとした問題

* 100要素のJSONの配列のコンパイルに3時間以上かかった
• 地味に打つのが面倒なのでエディタサポートも開発したい
• https://github.com/phenan/scalalr
技術的詳細
• @dsl はアノテーションマクロ
• implicit parameter を悪用してコンパイル時 LALR 構文解析
• 型 → 非終端記号 (文法を表現するやつ)
• 任意の部分式を括弧で括ったScala式で置き換え可能にするために

ちょっと複雑なことをしている
• この手法を応用して字句解析を変更可能にすることもできる (はず)
• アンカンファレンスで話してみたい (けどスライドは用意してない)

More Related Content

PDF
Scalaで萌える関数型プログラミング[エッセンシャル版]
PPTX
Scalaで学ぶ関数型言語超入門
PDF
Scala勉強会_2014_11_18
KEY
Scalaはじめました!
PDF
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
PDF
ScalaでBacklogの通知bot作ったで
PPTX
Java使いにとっての関数
PDF
Scala.js触ってみた
Scalaで萌える関数型プログラミング[エッセンシャル版]
Scalaで学ぶ関数型言語超入門
Scala勉強会_2014_11_18
Scalaはじめました!
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
ScalaでBacklogの通知bot作ったで
Java使いにとっての関数
Scala.js触ってみた

What's hot (7)

PDF
Scala基礎勉強会 懇親会LT
PDF
Lets scala
KEY
Beginners Scala in FAN 20121009
PDF
ADVENTAR の Bot を作る with Haskell
PDF
頑張りすぎないScala
PPTX
SQLドリルの話(仮)
PDF
[Scalamatsuri2016]あ、社内コミュニティ
Scala基礎勉強会 懇親会LT
Lets scala
Beginners Scala in FAN 20121009
ADVENTAR の Bot を作る with Haskell
頑張りすぎないScala
SQLドリルの話(仮)
[Scalamatsuri2016]あ、社内コミュニティ
Ad

Similar to Scalalr (10)

PDF
第1回名古屋Android勉強会Lt用資料
PDF
Javascript as an Embedded DSL - Expression Problemの解法例
PDF
ScalaでAndroidアプリ開発
PDF
An engineer uses monads
PDF
Scala超入門 - 2014/12/13 Scala関西勉強会
PPT
Power of Scala
PDF
Scalaの文字列処理 Day 2 リテラル・補間子・特殊な文字
PDF
MoteMote Compiler Plugin
PDF
Dslからのコードジェネレーションで楽々play開発
PPTX
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
第1回名古屋Android勉強会Lt用資料
Javascript as an Embedded DSL - Expression Problemの解法例
ScalaでAndroidアプリ開発
An engineer uses monads
Scala超入門 - 2014/12/13 Scala関西勉強会
Power of Scala
Scalaの文字列処理 Day 2 リテラル・補間子・特殊な文字
MoteMote Compiler Plugin
Dslからのコードジェネレーションで楽々play開発
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
Ad

Scalalr