Who am I <ul><li>Software Engineer at JBoss </li></ul><ul><li>JBoss Drools Core Developer - Working on BRMS design and implementation. </li></ul><ul><li>Language and Compilers researcher </li></ul><ul><li>fmeyer @ GUJ || #drools irc.codehaus.org </li></ul>
DSL DSLs are generally very high level languages tailored to speciﬁc tasks. They are designed to make their users particularly effective in a speciﬁc domain. DSLs include a wide range of applications, many of which you might not consider languages. DSLs include data for mats, conﬁguration ﬁle for mats, network protocols, text processing languages, protein patter ns, gene sequences, space probe control languages, and domain-speciﬁc programming languages.
Enterprise Usages ? <ul><li>insurance policy DSL developed internally in large insurance enterprise </li></ul><ul><li>combat simulation DSL (**) </li></ul><ul><li>salary calculation DSL </li></ul><ul><li>billing DSL </li></ul>
Advantages? <ul><li>DSLs allow solutions to be expressed in the idiom and at the level of abstraction of the problem domain. Consequently, domain experts themselves can understand, validate, modify, and often even develop DSL programs. </li></ul><ul><li>Self-documenting code. </li></ul><ul><li>DSLs enhance quality, productivity, reliability, maintainability, portability and reusability. </li></ul><ul><li>DSLs allow validation at the domain level. As long as the language constructs are safe any sentence written with them can be considered safe. </li></ul><ul><li>prefer Ruby, Python ... [*flexible languages] </li></ul>
Disadvantages <ul><li>Cost of designing, implementing, and maintaining a DSL. </li></ul><ul><li>Finding, setting, and maintaining proper scope. </li></ul><ul><li>Difficulty of balancing trade-offs between domain-specificity and general-purpose programming language constructs. </li></ul><ul><li>Potential loss of processor efficiency compared with hand-coded software. </li></ul><ul><li>Hard or impossible to debug. (*) </li></ul>
Antlr A sophisticated parser generator you can use to implement language interpreters, compilers, and other translators.
Low Complexity? recipe "PBJ Sandwich" ingredients "two slices of bread", "one heaping tablespoon of peanut butter", "one teaspoon of jam" instructions "spread peanut butter...", "spread jam...", "place other slice..." servings 1 prep_time "2 minutes"
Lexical analysis <ul><li>The specification of a programming language will include a set of rules, often expressed syntactically, specifying the set of possible character sequences that can form a token or lexeme. </li></ul>
***A lexeme is an abstract unit of morphological analysis in linguistics, A token is a categorized block of text, usually consisting of indivisible characters known as lexemes. A lexical analyser processes lexemes to categorize them according to function, giving them meaning. This assignment of meaning is known as tokenization . A token can look like anything: English, gibberish symbols, anything; it just needs to be a useful part of the structured text.
Java programming language: sum=3+2; lexeme token type sum IDENT = ASSIGN_OP 3 NUMBER + ADD_OP 2 NUMBER ; SEMICOLON
Parsing parsing (more formally syntactic analysis) is the process of analyzing a sequence of tokens to determine its grammatical structure with respect to a given formal grammar.
Parsing transforms input text into a data structure (AST) x = y - z * 3
Parser is the component of a compiler that carries out this task.
Relationship Between Characters, Tokens, and ASTs