Skip to content

dk14/typed-template

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

30 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

typed-template

This macro generates parser from user-friendly external grammar. AST returned from such parser will be typesafe (tree of case classes)

Example

Grammar:

instrument {name} is Option
exercise at {exerciseDate: String} {automatic: String}
  {optionsCount: String} options with strike {strike: String}
  with {count: String} underlyer
  pay premium {premium: String} from {partyFrom: String} to {partyTo: String} at {premiumDate: String}

Input:

instrument Equity is Option
  exercise at 10500/10/10 automatic
  20 options with strike 100
  with one underlyer
  pay premium 100500 from DB to NEDB at 10500/10/10  

Usage:

@generator(source = "option.template") object Env
Env.parse(instrument)

Output AST:

Env.Option(
  Env.ExerciseDate(10500/10/10,automatic),
  Env.OptionsCount(20,100),
  Env.Count(one),
  Env.Premium(100500,DB,NEDB,10500/10/10)
)

Try:

git clone https://github.com/dk14/typed-template.git
brew install sbt
sbt
;clean;test/runMain Test

Note: macroparadise must be added in client module to use this macro

autoCompilerPlugins := true,
resolvers in ThisBuild  += Resolver.sonatypeRepo("releases"),
libraryDependencies += "org.scalamacros" % "paradise" % "2.0.1" cross CrossVersion.full,
addCompilerPlugin("org.scalamacros" % "paradise" % "2.0.1" cross CrossVersion.full)

About

this macro generates parsers from specified grammars

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages