SQLDSLmerge join
#106#123
Outer (sorted) Inner (sorted)
#133
#106#106#117#123
SQLDSLmerge join
#106#123
Outer (sorted) Inner (sorted)
#133
#106#106#117#123
Internal DSL: TreeClojure way
headleft child right child
Internal DSL: TreeJava way
Generative DSL: Macros
excerpt macro from core.async
InstaparseWhat if context-free grammars were as easy to use as regular expressions?
Clojure is a functional programming language better than java
English GrammarExample
English GrammarExample
Named Entity Recognition
Kiev is the capital of Ukraine
Entity:City Entity:Country
SQL-2003 GrammarExample
1300+ rules
http://savage.net.au/SQL/sql-2003-2.bnf
insta/transformDevelopment
insta/transformDevelopment
Syntax ErrorException Handling
Performance TestsTesting
clojure.test does not support timeouts, write by yourself
Ambiguity TestsTesting
instaparse is able to handle ambiguity grammars though, still good to know where we behave poorly
InterfaceJava Integration
clojure-maven-pluginJava Integration
ANTLRAlternatives
http://stackoverflow.com/questions/1931307/antlr-is-there-a-simple-example
Lessons Learned #1
Too Much Rules100+ rules, possible to reduce to 50
Lessons Learned #2
Lein and Mavenare not friends
Lessons Learned #3
Code Coveragenot integrated
Lessons Learned #5
Evaluationis not a parser responsibility