Grammar-Driven Generation of Domain-Specific Language Testing Tools Using Aspects - PowerPoint PPT Presentation

About This Presentation
Title:

Grammar-Driven Generation of Domain-Specific Language Testing Tools Using Aspects

Description:

Title: AOSD Presentation Author: Suman Last modified by: wuh Created Date: 3/15/2004 4:18:07 AM Document presentation format: On-screen Show Other titles – PowerPoint PPT presentation

Number of Views:190
Avg rating:3.0/5.0
Slides: 65
Provided by: Sum468
Learn more at: https://gray.cs.ua.edu
Category:

less

Transcript and Presenter's Notes

Title: Grammar-Driven Generation of Domain-Specific Language Testing Tools Using Aspects


1
Grammar-Driven Generation of Domain-Specific
Language Testing Tools Using Aspects
Advisor Dr. Jeff Gray Thesis Committee Dr.
Barrett Bryant Dr. Brian Toone Dr. Chengcui
Zhang Dr. Marjan Mernik Dr. Mikhail Auguston
Ph.D. Defense Hui Wu wuh_at_cis.uab.edu http//www.ci
s.uab.edu/wuh 10/29/2007
2
Overview of Presentation
Eclipse PDE
Motivation
Background
Testing support for DSLs
Domain-SpecificLanguages
Research Goals
Raise AOP to a higher level of abstraction
My Approach
Generative Programming
Evaluation
2
Experimental Evaluation and Generality Analysis
AOP
3
Categories of DSL End-Users
Spreadsheet
Admin Assistants
Business Query Systems
Business Person
Modeling Language
Auto Factory Worker
DSL for Physics
Scientist
3
4
The Benefits of Using DSLs
  • Case studies and empirical evaluations documented
    in the research literature have identified the
    following benefits of DSLs
  • DSLs can hide the lower level programming
    language details from end-user programmers
  • DSLs assist in software maintenance whereby
    end-users can directly use the DSLs to make
    required routine modifications
  • DSLs assist end-users in writing more concise,
    descriptive, and platform independent programs
  • The use of DSLs increases flexibility,
    productivity, reliability, and usability shorten
    the application development time and reduce the
    development cost significantly

5
Motivation of Proposed Research
Editor
Compiler
Domain Experts program at DSL level
Domain Experts deal with GPL
Visualizer
Debugger
  • Test Engine

Profiler
DSL translated into General Purpose Language
(GPL)
Integrated Development Environment (IDE)
Domain Experts deal with DSL
5
6
Mismatch Between Abstraction Levels
Generated Java Parser Code
ANTLR Grammar
. public final void commands() throws
RecognitionException, TokenStreamException try
// for error handling
switch ( LA(1)) case
CALL case INIT case SET
case PRINT command()
commands() break
case END
break default
throw new NoViableAltException(LT(1),
getFilename()) public final void
function_name() throws RecognitionException,
TokenStreamException try // for
error handling switch
( LA(1)) case RIGHT
match(RIGHT)
fileio.print(" //move right")
fileio.print(" move_right()")
fileio.print(" ")
break
case LEFT
match(LEFT)
sllinenumberdsllinenumber1
fileio.print(" //move left")
fileio.print(" move_left()")
fileio.print(" ")
break
. commands ( ccommand cscommands
) command ( RIGHT
fileio.print("//move right")
fileio.print("xx1")
fileio.print("timetime1")
fileio.print(" ") LEFT
fileio.print("//move left")
fileio.print("xx-1")
fileio.print("timetime1")
fileio.print(" ")
6
7
Research Goal
  • A Matrix of DSL Testing Tools
  • Generalized approach to automatically produce a
    software product line of DSL testing tools from
    DSL grammars

Imperative DSL Debugger
Declarative DSL Debugger
Hybrid DSL Debugger
AspectG
Imperative DSL Test Engine
Declarative DSL Test Engine
Hybrid DSL Test Engine
Imperative DSL Profiler
Declarative DSL Profiler
Hybrid DSL Profiler
Future Work after PhD
8
Outline
  • Background
  • DSL Debugging Framework (DDF)
  • DSL Unit Testing Framework (DUTF)
  • AspectG
  • Future Work and Conclusion

9
Different Types of Debuggers
  • Categorized by Zellweger, 1984 based on
    behavior of a debugger
  • expected behavior debugger
  • truthful behavior debugger
  • Categorized by Auguston, 1998 based on the
    behavioral models of higher level debugging
    mechanisms
  • algorithmic debugger
  • declarative debugger
  • event-based debugger
  • The work in this dissertation represents expected
    behavior debuggers that perform typical debugging
    tasks on DSL programs

10
Categories of Domain-Specific Languages
  • Imperative DSL
  • Robot DSL
  • Declarative DSL
  • Feature Description Language (FDL)
  • BackusNaur Form (BNF) language syntax
    specification
  • Hybrid DSL
  • Swing User-interface Language (SWUL)
  • Hybrid Robot DSL

10
11
Categories of Domain-Specific Languages
  • Imperative DSL Centered around assignment
    expressions or control flow statements
  • Robot Language
  • 17 Down
  • 18 position(0,-1)
  • Down
  • 21 Init position(0,0)
  • 22 Call left
  • 23 Call down
  • 24 Call knight
  • 25 Set position(5,6)
  • 26 Call up
  • 27 Call right
  • 28 Print position

11
12
Categories of Domain-Specific Languages
  • Declarative DSL declares the relationship
    between inputs and outputs
  • Feature Description Language (FDL)

1 Car all (Carbody, Transmission, Engine,
Horsepower, opt(pullsTrailer)) 2 Transmission
oneof (automatic, manual) 3 Engine moreof
(electric, gasoline) 4 Horsepower oneof
(lowPower, mediumPower, highPower) 5 include
pullsTrailer 6 pullsTrailer requires highPower
  • BackusNaur Form (BNF) language syntax
  • specification a set of derivation rules

START begin COMMANDS end COMMANDS
COMMAND COMMANDS epsilon COMMAND
left right up down
12
13
Categories of Domain-Specific Languages
  • Hybrid DSL embedded GPL code within the DSL
    description (Robot)

Random String answer int max
JOptionPane myGUI new JOptionPane() Random
rand new Random() answer
myGUI.showInputDialog("Generate a random number
for X-axis between 1 and ") max
Integer.parseInt(answer) x
rand.nextInt(max) answer
myGUI.showInputDialog("Generate a random number
for Y-axis between 1 and ") max
Integer.parseInt(answer) y
rand.nextInt(max) myGUI.showMessageDialog(nul
l, "Generated Position(" x "," y ")")
Random Init position(0,0) Call left
Call down Call knight Set position(5,6)
Call up Call random Call right Print
position
13
14
Categories of Domain-Specific Languages
  • Hybrid DSL embedded DSL description (SWUL)
    within the GPL code

import javax.swing. import java.awt.
public class WelcomeSwing public static void
main(String ps) JFrame frame frame
title "Welcome!" content panel of
border layout center label text
"Hello World" south panel of grid
layout row button
text "cancel"
button text "ok"

frame.pack() frame.setVisible(true)
14
15
Eclipse Plug-In Based Software Development
  • Eclipse Debug Perspective
  • JUnit Eclipse Plug-in

a) Variable Inspector
b) Navigation Toolbar
15
16
Program Transformation with the Design
Maintenance System
  • Design Maintenance System (DMS) is a
    transformation and re-engineering toolkit
    developed by Semantic Designs
  • Provides lower level transformation functions
    such as parsing, AST generation and manipulation,
    pretty printing, powerful pattern matching, and
    source translation capabilities
  • Pre-constructed domains for several dozen GPLs
    (e.g., Java, C, and Object Pascal)
  • This research required the creation of a new
    domain for ANTLR

16
17
Overview of my Approach
Syntax-Directed Translation
Plug-In Based Software Development
ANTLR
Eclipse
public class Robot x0 y0 time0
//move left move_left()
Design Patterns
Generative Programming
Model-View-Controller Adapter Pattern
pointcut productions() within(command.)
before() productions() dsllinenumberdsllinen
umber1
Aspect-Oriented Programming on DSL Grammars
AspectG
17
18
Outline
  • Background
  • DSL Debugging Framework (DDF)
  • DSL Unit Testing Framework (DUTF)
  • AspectG
  • Future Work and Conclusion

19
DSL Debugging Framework (DDF)
19
20
Process of DSL Debugger Generation
Robot DSL corresponding GPL code generated in
Java
DSL grammar is defined using ANTLR Notation
DSL is the input of the Lexer and Parser
generated by ANTLR
Additional Mapping code generated in Java
DSL translation process
Corresponding GPL and Mapping Code are inputs of
Mapping component
Eclipse Debugging perspective communicates with
mapping component
jdb communicates with mapping component
20
21
Source Code Mapping
3 knight 4 position(0,1) 5 position(0,1) 6 position(1,0) 7 knight 8 9 Init position(0,0) 10 left 11 down 12 knight 13 Set position(5,6) 14 up 15 right 16 Print position 6 public static void move_knight() 7 xx0 8 yy1 9 xx0 10 yy1 11 xx1 12 yy0 13 public static void main(String args) 14 x0 15 y0 18 move_knight() 20 x 5 21 y 6 26 System.out.println("x coordinate"x"" 27 "y coordinate " y)
13, "Robot.java", 20, 21, "main", "none"
21
22
Debugging Methods Mapping
Mapping DSL GPL
Source Code n_i maps to m_i to m_j Line Number n_1 n_2 n_... n_i n_i1 n_... n_j n_j1 n_... Line Number m_1 m_2 m_... m_i m_i1 m_... m_j m_j1 m_...
Breakpoint Set breakpoint at n_i Set breakpoint at m_i
Step Over Step over line at n_i Step Over algorithm
Step Into Step into line at n_i Step Into algorithm
Terminate Terminate at line n_i Terminate at line m_i
Resume Resume at line n_i Resume at line m_i
22
23
DSL Debugging Step Over Algorithm
1 if (function name equals main) 2 if (dsl_line_number lt last line number of DSL code) 3 set breakpoint at gpl_line_number corresponding to dsl_line_number1 4 call cont() 5 6 else 7 call cont() 8 step over last line of DSL code, debugging session terminated 9 10 current dsl_line_number increased by one 11 12 else 13 get function_type from mapping information base 14 if (function_type equals "functionbody") 15 current dsl_line_number increased by one 16 for all the statements corresponding to this one line of DSL code 17 call step() 18 19 else if (function_type equals "functionend") 20 call step() 21 assign current dsl_line_number as previous_dsl_line_number 1 22 23
23
24
Debugging Results Mapping
1 INIT varVARIABLES LPAREN init_num1NUMBER COMMA init_num2NUMBER RPAREN 2 3 dsllinenumberdsllinenumber1 4 fileio.print("x"init_num1.getText()"") 5 fileresult.print("x_coordinateprint x") 6 gplbeginlinefileio.getLinenumber() 7 fileio.print("y"init_num2.getText()"") 8 fileresult.print("y_coordinateprint y") 9 fileio.print("time0""") 10 gplendlinefileio.getLinenumber() 11 filemap.print("mapping.add(new Map("dsllinenumber",\"Robot.java\"," 12 gplbeginline ","gplendline",""\""funcname"\""",""\""funcall"\"""))") 13 fileresult.print(variablevar.getText()"(x_coordinate,y_coordinate)") 14
Black Basic functionality Blue Source code
mapping Red Debugging results mapping
24
25
Generated DSL Debuggers
25
26
Imperative DSL Debugger
26
27
Declarative DSL (FDL) Debugger
27
28
Declarative DSL (BNF) Debugger Version 1
28
29
Declarative DSL (BNF) Debugger Version 2
29
30
Hybrid Robot Debugger (Java embedded in DSL)
30
31
Hybrid SWUL Debugger (DSL embedded in Java)
31
32
Hybrid SWUL Debugger Video Demo
  • There are 7 sets of demos in 3 different video
    formats
  • Available at
  • www.cis.uab.edu/wuh/ddf/demos.html

33
Generality Analysis of DDF
  • 19 software components 3,429 lines of code can
    be reused

DSL Category DSL Name Number of Specific Functions or Classes Customized Lines of Code
Imperative DSL Robot Language 2 69
Declarative DSL FDL 3 89
Declarative DSL BNF 5 261
Hybrid DSL Hybrid Robot Language 4 117
Hybrid DSL SWUL 5 152
33
34
JDB, GDB, and Cordbg Basic Debugging Commands
Comparison
Debugging Actions JDB (Java) GDB (C) Cordbg (C)
Set a Breakpoint stop at class line number break filenamelinenumber break file line number class function offset
Step Over step step count next count
Display Value print class.staticfield print expr print variable name
Terminate Exit quit Exit
Resume cont continue ignore-count cont count
34
35
Related Work in the Area of Domain-Specific
Language Debuggers
  • Khepera
  • Support optimization code debugger store
    transformation information in a database
  • Execution time and cost are high
  • JSR-045
  • Establishes standardized debugging tools for
    correlating Java bytecode to the source code of
    languages other than Java
  • Does not have a debugging result mapping process
  • ANTLR Studio
  • An example of a hybrid debugger
  • Based on the JSR-045 mapping mechanism
  • Display only Java variable values
  • TIDE
  • Although uses gdb, TIDE requires the end-user to
    understand a precise language specification in
    ASFSDF
  • Knowledge of the rewrite rules in the built-in
    library is required to construct a debugger for a
    new language

35
36
Outline
  • Background
  • DSL Debugging Framework (DDF)
  • DSL Unit Testing Framework (DUTF)
  • AspectG
  • Future Work and Conclusion

37
DSL Application Software Errors!
  • Before locating software errors how do we know
    there are bugs inside a DSL application?

38
DSL Unit Testing Framework (DUTF)
  • Complement to the DDF the DUTF assists in
    identifying the presence of errors and the DDF
    assists in isolating the specific location of the
    error
  • Architecture and process of construction is
    similar to the DSL Debugging Framework (DDF)
    architecture

38
39
DSL Unit Testing Framework (DUTF)
39
40
DSL Unit Testing Framework (DUTF)
  • Test Cases Mapping

Robot DSL Unit Test Case 1 TestCase testknight 2 Init position(0,0) 3 Expectedposition(1,2) 4 knight 5 AssertEqual (Expectedposition, position) 6 GPL Unit Test Case (JUnit) 11 public void testkinght() 12 robot.x 0 13 robot.y 0 14 int x1 15 int y2 16 robot.move_knight() 17 assertEquals(x, robot.x) 18 assertEquals(y, robot.y) 19
1, TestRobot.java,11,testknight
40
41
DSL Unit Testing Framework (DUTF)
  • Test Cases Mapping

Car FDL Unit Test Case 1 TestCase testFeatures 2 Expectedfeature(carbody, manual, highPower) 3 use Car.FDL(All) 4 Constraint C1 include pullsTrailer 5 AssertTrue(contain(Expectedfeature, feature)) 6 AssertEqual(6, numberof feature) 7
GPL Unit Test Case (JUnit) 11 public void testFeatures () 12 testFeatures.add("carbody") 13 testFeatures.add("manual") 14 testFeatures.add("highPower") 27 assertTrue(compareFeatures(testFeatures,parse(fc,root,cons))) 28 assertEquals(6,getFeatureListNumber(parse(fc,root,cons)))
41
42
DSL Unit Testing Framework (DUTF)Robot Language
Unit Test Engine
42
43
DSL Unit Testing Framework (DUTF)FDL Unit Test
Engine
43
44
Generality Analysis on DUTF
  • Among 22 software components in DUTF, there are
    3,001 lines of code that are generalized and
    reused to generate the different DSL unit test
    engines.

DSL Category DSL Name Number of Specific Functions or Classes Customized Lines of Code
Imperative DSL Robot Language 2 239
Declarative DSL FDL 4 482
44
45
JUnit and NUnit Basic Unit Test Actions
Comparison
Unit Test Actions JUnit (Java) NUnit (.Net languages)
Equality Assertion assertEquals(expected, actual) Assert.AreEqual(expected, actual)
Condition Test assertTrue(actual) Assert.IsTrue(actual)
Condition Test assertFalse(actual) Assert.IsFalse(actual)
Condition Test assertNull(actual) Assert.IsNull(actual)
Utility Method fail() Assert.Fail()
Identity Assert assertSame(expected, actual) Assert.AreSame(expected, actual)
45
46
Related Works in the Area ofDomain-Specific
Language Tools
  • ASFSDF
  • Generate program analysis and transformation
    tools, and produce software renovation tools
  • The unit testing tool support has not been
    reported
  • JST
  • Complicated mechanism (e.g., Language extension)
  • Does not focus on language tools generation
  • LISA
  • Can generate editor, parser, and visualizer for
    new languages
  • Debugger, test engine, and profiler are not the
    target language tools, LISA can be used as the
    front-end of our framework
  • SmartTools
  • Base on Java and XML technologies
  • Debugger, test engine, and profiler are not
    target language tools
  • Other Related Testing Tools
  • Parameterized unit testing
  • Testing grammar-driven functionality
  • Generating unit tests using symbolic execution
  • Generating test inputs of AspectJ programs

46
47
Outline
  • Background
  • DSL Debugging Framework (DDF)
  • DSL Unit Testing Framework (DUTF)
  • AspectG
  • Future Work and Conclusion

48
Crosscutting Concerns in Tool Generation Process
Crosscutting concerns observed in DSL grammars
during the generation of DSL debuggers and unit
test engines How do we address such concerns in
DSL grammars?
48
49
AspectG
  • Crosscutting concerns emerge in different
    software artifacts (e.g., model, grammar, and
    source code)
  • AspectG A domain-specific aspect language for
    language grammars written in ANTLR

49
50
Addition of Debugging Support A Crosscutting
Grammar Concern
Base Grammar
command ( RIGHT fileio.print(" //
move right") fileio.print(" xx1") filei
o.print(" timetime1") fileio.print("
") LEFT fileio.print("
//move left") fileio.print(" xx-1") file
io.print(" timetime1") fileio.print("
")
What if this line changes?
Change here
Duplicate Debugging Aspect Code
dsllinenumberdsllinenumber1 gplbeginlinefil
eio.getLinenumber() gplendlinefileio.getLinenum
ber() filemap.print(" mapping.add(new
Map("dsllinenumber", \"Robot.java\","gplbeginli
ne","gplendline"))")
dsllinenumberdsllinenumber1 gplbeginlinefil
eio.getLinenumber() gplendlinefileio.getLinenum
ber() filemap.print(" mapping.add(new
Map("dsllinenumber", \"Robot.java\","gplbeginli
ne","gplendline"))")
Change here
Change
50
51
AspectG Design Challenge
  • Design of a join point model for AspectG
  • What are the join points that will be captured in
    AspectG?
  • Are AspectG join points static or dynamic?
  • What is an appropriate pointcut language syntax
    to describe these join points?
  • What are advice in this domain?
  • Does the ordering of the advice matter? If so,
    how is the weaving order prioritized?
  • How to deal with weaving conflicts and avoid
    infinite weaving?

51
52
Join Point Model for AspectG
ANTLR Grammar
AspectG
pointcut productions() within(command.) poi
ntcut count_gpllinenumber() within(command.)
match (fileio.print("timetime1"))
before() productions() dsllinenumberdsllinenu
mber1 before() count_gpllinenumber()
gplbeginlinefileio.getLinenumber() after()
count_gpllinenumber() gplendlinefileio.getLine
number() after() productions()
filemap.print(" mapping.add(new Map("
dsllinenumber", \"Robot.java\","gplbeginline
","gplendline"))")
command ( RIGHT
dsllinenumberdsllinenumber1
fileio.print("xx1") gplbeginlinefileio.g
etLinenumber() fileio.print("timetime1")
gplendlinefileio.getLinenumber()
fileio.print(" ") filemap.print("
mapping.add(new Map(" dsllinenumber",
\"Robot.java\","gplbeginline
","gplendline"))")
52
53
Weaving into DSL Grammars Using AspectG
aspect debugging ( pointcut productions()
withincommand. pointcut count_gpllinenumber()
within command. match
fileio.print("timetime1") begin()
productions() dsllinenumberdsllinenumber1
after() count_gpllinenumber()
gplbeginlinefileio.getLinenumber()
gplendlinefileio.getLinenumber() )
default base domain Antlr. external pattern
mid_advice(bef_advsemantic_strings,
semico
QUOTED_STRING,
orig_stmtsemantic)
semantic 'mid_advice' in domain Antlr. rule
print_mid_stree(java_seq semantic) semantic -gt
semantic " \java_seq " -gt "\mid_advice\(\mi_a
dvice\(\) \, \semi\(\)\, \java_seq\)" if
java_seq "\semantic \mid_advice\(\mi_advice\(\
) \, \semi\(\)\, \java_seq\)". pattern
mi_advice() semantic_strings
"commandgplbeginlinefileio.getLinenumber()". p
attern semi() QUOTED_STRING
"\"timetime1\"". public ruleset a
print_mid_stree .
command ( RIGHT dsllinenumberdslli
nenumber1 fileio.print("//move right")
gplbeginlinefileio.getLinenumber()
fileio.print("xx1") gplendlinefileio.getL
inenumber() fileio.print("timetime1")
filemap.print(" mapping.add(new
Map("dsllinenumber", \"Robot.java\","gplbegi
nline","gplendline"))") fileio.print("
")
command ( RIGHT
fileio.print("//move right")
fileio.print("xx1") fileio.print("time
time1") fileio.print(" ")
53
54
Steps to Weave Debugging Aspects into an ANTLR
Grammar
Specify ANTLR grammar specification Specify Java semantic actions using DMS regular expression Generate ANTLR Parser Generate abstract syntax tree with ANTLR_ACTION nodes Search ANTLR_ACTION nodes from the generated AST Retrieve ANTLR_ACTION nodes and store them in a hash map Retrieve associated string expression from each ANTLR_ACTION node Modify the regular Java parser by changing the starting production Parse the associated string expressions as regular Java statement lists Transform the statement lists using the ASTInterface API Regenerate the ANTLR_ACTION nodes with debugging aspects weaved in Output the complete ANTLR AST (with modified action nodes)
54
55
DSL Line Number Counter Aspect in AspectG
aspect dsllinenumber ( pointcut productions() withincommand. after() productions() dsllinenumberdsllinenumber1
Corresponding Generated Low-level Rule
Transformation
1 default base domain Antlr. 2 3 external pattern after_advice(af_advstatement_string, 4 lefthandside IDENTIFIER, 5 orig_stmtsemantic) 6 semantic 'after_advice' in domain Antlr. 7 8 rule print_after_tree(java_seq semantic) semantic -gt semantic 9 " \java_seq " -gt "\after_advice\(\aft_advice\(\) \, \lhs\(\)\, \java_seq\)" 10 if java_seq"\semantic \after_advice\(\aft_advice\(\)\,\lhs\(\)\,\java_seq\)". 11 pattern aft_advice() statement_string "dsllinenumberdsllinenumber1". 12 13 pattern lhs() IDENTIFIER "command". 14 15 public ruleset a print_after_tree .
55
56
AspectG Video Demo
  • There are 7 sets of demos in 3 different video
    formats
  • Available at
  • www.cis.uab.edu/wuh/ddf/demos.html

57
Related Work in the Area of Aspect-Oriented
Grammars
  • AspectLISA
  • Uses an explicit join point model
  • Inheritance of advice and pointcuts
  • Used for language extension, not tool generation
  • AspectASF
  • Weave crosscutting properties into an ASFSDF
    specification
  • Unit test engine is not mentioned in the
    generation list

57
58
Outline
  • Background
  • DSL Debugging Framework (DDF)
  • DSL Unit Testing Framework (DUTF)
  • AspectG
  • Future Work and Conclusion

59
Future Work
  • An extension of the current framework that
    enables DSL profiling
  • Investigation into the scalable, reliable, and
    extensible DSL testing framework
  • Application of different IDE platforms and GPLs
  • Adaptation of DDF and DUTF to address more
    complex DSLs
  • Generalize the framework in the areas of
    tool-independence and language-independence
  • A DSL IDE for end-user programmers
  • Adaptation to event grammar approach
  • Exploiting further areas of aspect-oriented
    features within the language grammar

59
60
Contributions
  • Provides a software framework empowering end-user
    developers with traditional software engineering
    debugging and unit testing capabilities at the
    DSL level
  • Developed techniques for debugging and unit
    testing a diverse set of DSLs
  • Developed an aspect language for grammars and
    impacted the area of Grammarware

60
61
Publications
  • Journal papers 4 (2 under review), Conference
    and workshop papers 7
  • Hui Wu, Jeff Gray, and Marjan Mernik, Unit
    Testing Support for Domain-Specific Languages,
    under review, Journal of Research and Practice in
    Information Technology.
  • Damijan Rebernak, Marjan Mernik, Hui Wu, and Jeff
    Gray, Domain-Specific Aspect Languages for
    Modularizing Crosscutting Concerns in Grammars,
    under review, IET Special Issue on
    Domain-Specific Aspect Languages.
  • Hui Wu, Jeff Gray, and Marjan Mernik,
    Grammar-Driven Generation of Domain-Specific
    Language Debuggers, accepted for publication,
    Software Practice and Experience, 2007.
  • Pedro Rangel Henriques, Maria Joao Varanda
    Pereira, Marjan Mernik, Mitja Lenic, Jeff Gray,
    and Hui Wu, Automatic Generation of
    Language-based Tools using LISA, IEE Proceedings
    - Software, vol. 152, no. 02, April 2005, pp.
    54-69.
  • Hui Wu, Jeff Gray, Suman Roychoudhury, and Marjan
    Mernik, Weaving a Debugging Aspect into
    Domain-Specific Language Grammars, ACM Symposium
    for Applied Computing-Programming for Separation
    of Concerns Track, Santa Fe, NM, March 2005, pp.
    1370-1374.
  • Jeff Gray, Jing Zhang, Yuehua Lin, Hui Wu, Suman
    Roychoudhury, Rajesh Sudarsan, Aniruddha Gokhale,
    Sandeep Neema, Feng Shi, and Ted Bapty,
    Model-Driven Program Transformation of a Large
    Avionics Framework, Generative Programming and
    Component Engineering, Springer-Verlag LNCS,
    Vancouver, BC, October 2004, pp. 361-378.
  • Yuehua Lin, Song Zhou, Chuanxi Xu, Hui Wu, Jing
    Zhang, Juanqin Wang, Jeff Gray, and Barrett
    Bryant, E-R Modeler A Database Modeling Toolkit
    for Eclipse, Annual ACM SE Conference,
    Huntsville, Alabama, April 2004, pp. 160-165.
  • Suman Roychoudhury, Jeff Gray, Hui Wu, Jing
    Zhang, and Yuehua Lin, A Comparative Analysis of
    Meta-programming and Aspect-Orientation, Annual
    ACM SE Conference, Savannah, GA, March 2003, pp.
    196-201.
  • Damijan Rebernak, Marjan Mernik, Hui Wu, and Jeff
    Gray, Domain-Specific Aspect Languages for
    Modularizing Crosscutting Concerns in Grammars,
    GPCE Workshop on Domain-Specific Aspect
    Languages, Portland, OR, October 2006.
  • Hui Wu, Grammar-Driven Generation of
    Domain-Specific Language Testing Tools,
    Object-Oriented Programming, Systems, Languages
    Applications, Doctoral Symposium 2006, Portland,
    OR, October 2006.
  • Hui Wu, Automated Generation of Testing Tools
    for Domain-Specific Languages, IEEE/ACM
    International Conference on Automated Software
    Engineering, Doctoral Symposium, Long Beach, CA,
    November, 2005.

62
Acknowledgement The work presented in this
dissertation was supported in part by the IBM
Innovation Grant.
Video demonstrations and papers available
at http//www.cis.uab.edu/wuh/ddf
Questions?
62
63
Backup Slides
64
GPL Line Number Counter Aspect in AspectG
aspect gplbeginlinenumber ( pointcut count_gpllinenumber() within command. match fileio.print("timetime1") after() count_gpllinenumber() gplbeginlinefileio.getLinenumber())
Corresponding Generated Low-level Rule
Transformation
1 default base domain Antlr. 2 3 pattern semi() QUOTED_STRING "\"timetime1\"". 4 5 external pattern mid_advice(bef_advsemantic_strings, 6 semico QUOTED_STRING, 7 orig_stmtsemantic) 8 semantic 'mid_advice' in domain Antlr. 9 10 rule print_mid_stree(java_seq semantic) semantic -gt semantic 11 " \java_seq " -gt "\mid_advice\(\mi_advice\(\) \, \semi\(\)\, \java_seq\)" 12 if java_seq"\semantic\mid_advice\(\mi_advice\(\) \, \semi\(\)\, \java_seq\)". 13 14 pattern m_advice()semantic_strings"commandgplbeginlinefileio.getLinenumber()". 15 16 public ruleset a print_mid_stree .
64
Write a Comment
User Comments (0)
About PowerShow.com