Case Studies
1. Grammar ATM
- Grammar described in EBNF
ATMsoftware = UserInterface , Bankingfunctionality |
UserInterface , Bankingfunctionality , Additionalfunctionality;
UserInterface = r_1_5;
r_1_5 = t_Basic2Dview |
t_Deluxe3Dview;
Bankingfunctionality = t_Checkingbalance , t_Withdrawnmoney , t_Viewtransaction , t_Changeaccountpassword , t_Printingbalanceafterwithdrawal |
t_Checkingbalance , t_Withdrawnmoney , t_Viewtransaction , t_Changeaccountpassword , t_Printingbalanceafterwithdrawal , t_Depositmoney |
t_Printingstatement |
t_Changemaximumlimitforwithdrawal |
t_Localtransfertothesamebank |
Localtransfertootherbanks |
t_Internationaltransfer |
t_Moneyexchange |
t_Checkingmoneyexchangerate;
Localtransfertootherbanks = r_2_16_17;
r_2_16_17_sec = LAMBDA |
r_2_16_17;
r_2_16_17 = t_Detuschbank , r_2_16_17_sec |
t_Stadtparkasse , r_2_16_17_sec |
t_Volksbank , r_2_16_17_sec;
Additionalfunctionality = t_Mobiletop-up |
t_Paythebills |
Languageselection;
Languageselection = r_4_30_31;
r_4_30_31 = t_German |
t_English |
t_French |
t_Italian;
G.startSymbol = "ATMsoftware"
G.ATMsoftware = alt(seq(V.UserInterface,V.Bankingfunctionality),seq(V.UserInterface,seq(V.Bankingfunctionality,V.Additionalfunctionality)))
G.UserInterface = V.r_1_5
G.r_1_5 = alt(terminal('t_Basic2Dview'),terminal('t_Deluxe3Dview'))
G.Bankingfunctionality = alt(seq(terminal('t_Checkingbalance'),seq(terminal('t_Withdrawnmoney'),seq(terminal('t_Viewtransaction'),seq(terminal('t_Changeaccountpassword'),terminal('t_Printingbalanceafterwithdrawal'))))),seq(terminal('t_Checkingbalance'),seq(terminal('t_Withdrawnmoney'),seq(terminal('t_Viewtransaction'),seq(terminal('t_Changeaccountpassword'),seq(terminal('t_Printingbalanceafterwithdrawal'),terminal('t_Depositmoney')))))),terminal('t_Printingstatement'),terminal('t_Changemaximumlimitforwithdrawal'),terminal('t_Localtransfertothesamebank'),V.Localtransfertootherbanks,terminal('t_Internationaltransfer'),terminal('t_Moneyexchange'),terminal('t_Checkingmoneyexchangerate'))
G.Localtransfertootherbanks = V.r_2_16_17
G.r_2_16_17_sec = alt(empty(),V.r_2_16_17)
G.r_2_16_17 = alt(seq(terminal('t_Detuschbank'),V.r_2_16_17_sec),seq(terminal('t_Stadtparkasse'),V.r_2_16_17_sec),seq(terminal('t_Volksbank'),V.r_2_16_17_sec))
G.Additionalfunctionality = alt(terminal('t_Mobiletop_up'),terminal('t_Paythebills'),V.Languageselection)
G.Languageselection = V.r_4_30_31
G.r_4_30_31 = alt(terminal('t_German'),terminal('t_English'),terminal('t_French'),terminal('t_Italian'))
- Results without the coverage criteria
Execution |
MaxDerivlen |
Run Time |
Non-Terminal Covered |
Terminal Covered |
Production Covered |
Sentences |
1 |
3 |
0:00.02 |
50% |
66% |
53.57% |
48 |
2 |
4 |
0:00.02 |
70% |
83.33% |
75% |
112 |
3 |
5 |
0:00.02 |
100% |
100% |
96.42% |
154 |
4 |
6 |
0:00.03 |
100% |
100% |
96.42% |
154 |
5 |
7 |
0:00.06 |
100% |
100% |
100% |
280 |
- Results using the terminal coverage criterion
Execution |
MaxDerivlen |
Run Time |
Non-Terminal Covered |
Terminal Covered |
Production Covered |
Sentences |
1 |
3 |
0:00.02 |
50% |
66% |
53.57% |
11 |
2 |
4 |
0:00.02 |
70% |
83.33% |
75% |
15 |
3 |
5 |
0:00.02 |
100% |
100% |
96.42% |
18 |
3 |
6 |
0:00.02 |
100% |
100% |
96.42% |
18 |
3 |
7 |
0:00.02 |
100% |
100% |
96.42% |
18 |
- Results using the production coverage criterion
Execution |
MaxDerivlen |
Run Time |
Non-Terminal Covered |
Terminal Covered |
Production Covered |
Sentences |
1 |
3 |
0:00.02 |
50% |
66% |
53.57% |
11 |
2 |
4 |
0:00.02 |
70% |
83.33% |
75% |
15 |
3 |
5 |
0:00.02 |
100% |
100% |
96.42% |
18 |
4 |
6 |
0:00.02 |
100% |
100% |
96.42% |
18 |
5 |
7 |
0:00.02 |
100% |
100% |
100% |
19 |
2. Grammar Digital Video System
- Grammar described in EBNF
dvs = control , server_pc , play |
control , server_pc , play , LHS_network_hw |
client_pc |
LHS_handheld;
LHS_network_hw = network_hw , net;
LHS_handheld = t_handheld , t_irda_port;
LHS_net = net , network_hw;
control = t_remote , play1 |
t_remote , play1 , telephone |
LHS_net |
edit;
telephone = t_sms;
net = t_email |
t_email , t_web |
t_wap;
LHS_add_music = t_add_music , t_audio;
edit = LHS_add_music;
LHS_audio = t_audio , t_add_music;
play1 = t_video |
t_video , t_slides |
LHS_audio;
network_hw = t_modem |
t_ethernet;
LHS_irda_port = t_irda_port , t_handheld;
server_pc = t_network |
LHS_irda_port;
play = t_on_demand;
client_pc = t_network;
G.startSymbol = "dvs"
G.dvs = alt(seq(V.control,seq(V.server_pc,V.play)),seq(V.control,seq(V.server_pc,seq(V.play,V.LHS_network_hw))),V.client_pc,V.LHS_handheld)
G.LHS_network_hw = seq(V.network_hw,V.net)
G.LHS_handheld = seq(terminal('t_handheld'),terminal('t_irda_port'))
G.LHS_net = seq(V.net,V.network_hw)
G.control = alt(seq(terminal('t_remote'),V.play1),seq(terminal('t_remote'),seq(V.play1,V.telephone)),V.LHS_net,V.edit)
G.telephone = terminal('t_sms')
G.net = alt(terminal('t_email'),seq(terminal('t_email'),terminal('t_web')),terminal('t_wap'))
G.LHS_add_music = seq(terminal('t_add_music'),terminal('t_audio'))
G.edit = V.LHS_add_music
G.LHS_audio = seq(terminal('t_audio'),terminal('t_add_music'))
G.play1 = alt(terminal('t_video'),seq(terminal('t_video'),terminal('t_slides')),V.LHS_audio)
G.network_hw = alt(terminal('t_modem'),terminal('t_ethernet'))
G.LHS_irda_port = seq(terminal('t_irda_port'),terminal('t_handheld'))
G.server_pc = alt(terminal('t_network'),V.LHS_irda_port)
G.play = terminal('t_on_demand')
G.client_pc = terminal('t_network')
- Results without the coverage criteria
Execution |
MaxDerivlen |
Run Time |
Non-Terminal Covered |
Terminal Covered |
Production Covered |
Sentences |
1 |
3 |
0:00.01 |
18.75% |
20% |
17.85% |
2 |
2 |
4 |
0:00.02 |
75% |
86.66% |
75% |
58 |
3 |
5 |
0:00.03 |
100% |
100% |
100% |
184 |
- Results using the terminal coverage criterion
Execution |
MaxDerivlen |
Run Time |
Non-Terminal Covered |
Terminal Covered |
Production Covered |
Sentences |
1 |
3 |
0:00.01 |
18.75% |
20% |
17.85% |
2 |
2 |
4 |
0:00.02 |
62.5% |
86.66% |
75% |
8 |
3 |
5 |
0:00.02 |
68.75% |
100% |
100% |
9 |
- Results using the production coverage criterion
Execution |
MaxDerivlen |
Run Time |
Non-Terminal Covered |
Terminal Covered |
Production Covered |
Sentences |
1 |
3 |
0:00.02 |
18.75% |
20% |
17.85% |
2 |
2 |
4 |
0:00.01 |
75% |
86.66% |
75% |
10 |
3 |
5 |
0:00.02 |
100% |
100% |
100% |
13 |
3. Grammar Mobile Phone
- Grammar described in EBNF
MobilePhone = UtilityFunctions , Settings |
UtilityFunctions , Settings , Media |
Connectivity;
LHS_Games = t_Games , t_JavaSupport;
UtilityFunctions = t_Calls , Messaging , t_Alarm , t_RingingTones |
t_Calls , Messaging , t_Alarm , t_RingingTones , LHS_Games;
Messaging = r_1_3_5;
r_1_3_5-sec = LAMBDA |
r_1_3_5;
r_1_3_5 = t_SMS , r_1_3_5-sec |
t_MMS , r_1_3_5-sec;
LHS_JavaSupport = t_JavaSupport , t_Games;
Settings = OS |
OS , LHS_JavaSupport;
OS = r_11_12_14;
r_11_12_14 = t_Symbian |
t_WinCE;
Media = t_Camera |
t_Camera , t_MP3;
Connectivity = t_USB |
t_USB , t_Bluetooth;
G.startSymbol = "MobilePhone"
G.MobilePhone = alt(seq(V.UtilityFunctions,V.Settings),seq(V.UtilityFunctions,seq(V.Settings,V.Media)),V.Connectivity)
G.LHS_Games = seq(terminal('t_Games'),terminal('t_JavaSupport'))
G.UtilityFunctions = alt(seq(terminal('t_Calls'),seq(V.Messaging,seq(terminal('t_Alarm'),terminal('t_RingingTones')))),seq(terminal('t_Calls'),seq(V.Messaging,seq(terminal('t_Alarm'),seq(terminal('t_RingingTones'),V.LHS_Games)))))
G.Messaging = V.r_1_3_5
G.r_1_3_5_sec = alt(empty(),V.r_1_3_5)
G.r_1_3_5 = alt(seq(terminal('t_SMS'),V.r_1_3_5_sec),seq(terminal('t_MMS'),V.r_1_3_5_sec))
G.LHS_JavaSupport = seq(terminal('t_JavaSupport'),terminal('t_Games'))
G.Settings = alt(V.OS,seq(V.OS,V.LHS_JavaSupport))
G.OS = V.r_11_12_14
G.r_11_12_14 = alt(terminal('t_Symbian'),terminal('t_WinCE'))
G.Media = alt(terminal('t_Camera'),seq(terminal('t_Camera'),terminal('t_MP3')))
G.Connectivity = alt(terminal('t_USB'),seq(terminal('t_USB'),terminal('t_Bluetooth')))
- Results without the coverage criteria
Execution |
MaxDerivlen |
Run Time |
Non-Terminal Covered |
Terminal Covered |
Production Covered |
Sentences |
1 |
2 |
0:00.01 |
16.66% |
14.28% |
19.04% |
2 |
2 |
3 |
0:00.01 |
16.66% |
14.28% |
19.04% |
2 |
3 |
4 |
0:00.01 |
16.66% |
14.28% |
19.04% |
2 |
4 |
5 |
0:00.02 |
100% |
100% |
100% |
50 |
- Results using the terminal coverage criterion
Execution |
MaxDerivlen |
Run Time |
Non-Terminal Covered |
Terminal Covered |
Production Covered |
Sentences |
1 |
2 |
0:00.01 |
16.66% |
14.28% |
19.04% |
2 |
2 |
3 |
0:00.01 |
16.66% |
14.28% |
19.04% |
2 |
3 |
4 |
0:00.01 |
16.66% |
14.28% |
19.04% |
2 |
4 |
5 |
0:00.02 |
100% |
100% |
95.23% |
8 |
- Results using the production coverage criterion
Execution |
MaxDerivlen |
Run Time |
Non-Terminal Covered |
Terminal Covered |
Production Covered |
Sentences |
1 |
2 |
0:00.02 |
16.66% |
14.28% |
19.04% |
2 |
2 |
3 |
0:00.02 |
16.66% |
14.28% |
19.04% |
2 |
3 |
4 |
0:00.02 |
16.66% |
14.28% |
19.04% |
2 |
4 |
5 |
0:00.02 |
100% |
100% |
95.23% |
9 |
5 |
6 |
0:00.02 |
100% |
100% |
95.23% |
9 |
6 |
7 |
0:00.02 |
100% |
100% |
100% |
10 |
4. Grammar HIS
The Home Integration System (HIS) is feature model representing integrate systems of a house [Kang et al. 2002].
- Grammar described in EBNF
his = services , administration , detection_devices , action_devices , monitor_control , quality_attributes
| services , administration , detection_devices , action_devices , monitor_control , quality_attributes , LHS_communication;
LHS_communication = communication , message;
LHS_flood = flood , t_moisture_sensor;
services = t_security , intrusion , fire |
t_security , intrusion , fire , LHS_flood;
intrusion = detection_int , action_int;
detection_int = motion;
motion = monitoring_detecting_mot;
monitoring_detecting_mot = _id_0;
_id_0 = t_discrete_value |
t_continuous_value;
LHS_message = message , communication;
action_int = t_door_operation , t_alarm |
t_door_operation , t_alarm , LHS_message;
message = t_voice |
t_voice , t_data;
fire = detection_fire , action_fire;
detection_fire = smoke;
smoke = monitoring_detecting_smk;
monitoring_detecting_smk = _id_1;
_id_1 = t_discrete_value |
t_continuous_value;
LHS_water = t_water , t_sprinkler;
action_fire = LHS_water |
LHS_water , t_gas;
flood = detection_flood , action_flood;
detection_flood = moisture;
moisture = monitoring_detecting_moi;
monitoring_detecting_moi = _id_2;
_id_2 = t_discrete_value |
t_continuous_value;
LHS_pumping = t_pumping , t_sump_pump;
action_flood = t_water_main |
t_water_main , LHS_pumping;
administration = hmi;
hmi = _id_3;
_id_3 = t_standard |
t_advanced;
communication = t_telephone |
t_telephone , internet;
internet = connection;
connection = _id_4;
_id_4 = t_tcp |
t_udp;
LHS_moisture_sensor = t_moisture_sensor , t_flood;
detection_devices = t_motion_sensor , t_skoke_sensor |
t_motion_sensor , t_skoke_sensor , LHS_moisture_sensor;
LHS_sprinkler = t_sprinkler , t_water;
LHS_sump_pump = t_sump_pump , t_pumping;
action_devices = LHS_sprinkler |
LHS_sprinkler , LHS_sump_pump;
monitor_control = t_direct , scheduled , responding_strategy , t_event_based;
scheduled = t_periodic , t_one_time;
responding_strategy = t_priority |
t_priority , t_sequential;
quality_attributes = t_usability , t_scalability , reliability , t_safety;
reliability = redundancy_control;
redundancy_control = _id_5;
_id_5 = t_active |
t_standby;
G.startSymbol = "his"
G.LHS_communication = seq(V.communication,V.message)
G.his = alt(seq(V.services,seq(V.administration,seq(V.detection_devices,seq(V.action_devices,seq(V.monitor_control,V.quality_attributes))))),seq(V.services,seq(V.administration,seq(V.detection_devices,seq(V.action_devices,seq(V.monitor_control,seq(V.quality_attributes,V.LHS_communication)))))))
G.LHS_flood = seq(V.flood,terminal('t_moisture_sensor'))
G.services = alt(seq(terminal('t_security'),seq(V.intrusion,V.fire)),seq(terminal('t_security'),seq(V.intrusion,seq(V.fire,V.LHS_flood))))
G.intrusion = seq(V.detection_intrusion,V.action_intrusion)
G.detection_intrusion = V.motion
G.motion = V.monitoring_detecting_motion
G.monitoring_detecting_motion = V.id_0
G.id_0 = alt(terminal('t_discrete_value'),terminal('t_continuous_value'))
G.LHS_message = seq(V.message,V.communication)
G.action_intrusion = alt(seq(terminal('t_door_operation'),terminal('t_alarm')),seq(terminal('t_door_operation'),seq(terminal('t_alarm'),V.LHS_message)))
G.message = alt(terminal('t_voice'),seq(terminal('t_voice'),terminal('t_data')))
G.fire = seq(V.detection_fire,V.action_fire)
G.detection_fire = V.smoke
G.smoke = V.monitoring_detecting_smoke
G.monitoring_detecting_smoke = V.id_1
G.id_1 = alt(terminal('t_discrete_value'),terminal('t_continuous_value'))
G.LHS_water = seq(terminal('t_water'),terminal('t_sprinkler'))
G.action_fire = alt(V.LHS_water,seq(V.LHS_water,terminal('t_gas')))
G.flood = seq(V.detection_flood,V.action_flood)
G.detection_flood = V.moisture
G.moisture = V.monitoring_detecting_moisture
G.monitoring_detecting_moisture = V.id_2
G.id_2 = alt(terminal('t_discrete_value'),terminal('t_continuous_value'))
G.LHS_pumping = seq(terminal('t_pumping'),terminal('t_sump_pump'))
G.action_flood = alt(terminal('t_water_main'),seq(terminal('t_water_main'),V.LHS_pumping))
G.administration = V.hmi
G.hmi = V.id_3
G.id_3 = alt(terminal('t_standard'),terminal('t_advanced'))
G.communication = alt(terminal('t_telephone'),seq(terminal('t_telephone'),V.internet))
G.internet = V.connection
G.connection = V.id_4
G.id_4 = alt(terminal('t_tcp'),terminal('t_udp'))
G.LHS_moisture_sensor = seq(terminal('t_moisture_sensor'),terminal('t_flood'))
G.detection_devices = alt(seq(terminal('t_motion_sensor'),terminal('t_skoke_sensor')),seq(terminal('t_motion_sensor'),seq(terminal('t_skoke_sensor'),V.LHS_moisture_sensor)))
G.LHS_sprinkler = seq(terminal('t_sprinkler'),terminal('t_water'))
G.LHS_sump_pump = seq(terminal('t_sump_pump'),terminal('t_pumping'))
G.action_devices = alt(V.LHS_sprinkler,seq(V.LHS_sprinkler,V.LHS_sump_pump))
G.monitor_control = seq(terminal('t_direct'),seq(V.scheduled,seq(V.responding_strategy,terminal('t_event_based'))))
G.scheduled = seq(terminal('t_periodic'),terminal('t_one_time'))
G.responding_strategy = alt(terminal('t_priority'),seq(terminal('t_priority'),terminal('t_sequential')))
G.quality_attributes = seq(terminal('t_usability'),seq(terminal('t_scalability'),seq(V.reliability,terminal('t_safety'))))
G.reliability = V.redundancy_control
G.redundancy_control = V.id_5
G.id_5 = alt(terminal('t_active'),terminal('t_standby'))
- Results without the coverage criteria
Execution |
MaxDerivlen |
Run Time |
Non-Terminal Covered |
Terminal Covered |
Production Covered |
Sentences |
1 |
7 |
0:02.20 |
82.22% |
96.66% |
53.57% |
5376 |
2 |
8 |
0:12.44 |
100% |
100% |
75% |
26880 |
3 |
9 |
0:30.72 |
100% |
100% |
96.42% |
62720 |
- Results using the terminal coverage criterion
Execution |
MaxDerivlen |
Run Time |
Non-Terminal Covered |
Terminal Covered |
Production Covered |
Sentences |
1 |
7 |
0:00.03 |
82.22% |
96.96% |
|
12 |
2 |
8 |
0:00.03 |
97.77% |
100% |
|
13 |
3 |
9 |
0:00.03 |
95.55% |
100% |
|
13 |
- Results using the production coverage criterion
Execution |
MaxDerivlen |
Run Time |
Non-Terminal Covered |
Terminal Covered |
Production Covered |
Sentences |
1 |
7 |
0:00.06 |
82.22% |
96.96% |
81.96% |
14 |
2 |
8 |
0:00.07 |
100% |
100% |
100% |
17 |
3 |
9 |
0:00.07 |
100% |
100% |
100% |
17 |
5. Grammar Model Transformation
Model transformation represents a feature model of transformations for taxonomy [Czarnecki and Helsen 2003].
- Grammar described in EBNF
ModelTransformation = Transformationrules , Source_Targetrelationship , Ruleapplicationstrategy , Rulescheduling , Ruleorganization , Tracing , Directionality |
Transformationrules , Source_Targetrelationship , Ruleapplicationstrategy , Rulescheduling , Ruleorganization , Tracing , Directionality , Ruleapplicationscoping;
Transformationrules = LHS/RHS |
LHS/RHS , t_LHS/RHSSyntacticSeparation |
t_Bidirectionality |
t_Parameterization |
t_Intermediatestructures;
LHS/RHS = Variables |
id_1;
Variables = id_0;
id_0 = t_Untyped |
t_Syntacticallytyped |
t_Semanticallytyped;
id_1-sec = LAMBDA |
_id_1;
id_1 = Patterns , id_1_sec |
Logic , id_1_sec;
Patterns = Form , Syntax , Typing;
Form = id_2;
id_2 = t_Strings |
t_Terms |
t_Graphs;
Syntax = id_3;
id_3-sec = LAMBDA |
id_3;
id_3 = t_Abstract , _id_3_sec |
Concrete , _id_3_sec;
Concrete = id_4;
id_4-sec = LAMBDA |
id_4;
id_4 = t_Textual , _id_4_sec |
t_Graphical , _id_4_sec;
Typing = id_5
_id_5 = t_Untyped |
t_Syntacticallytyped |
t_Semanticallytyped
Logic = id_6;
id_6-sec = LAMBDA |
id_6;
id_6 = t_Non-executable , id_6_sec |
Executable , id_6_sec;
Executable = id_7
id_7-sec = LAMBDA |
id_7
id_7 = t_Imperative , id_7-sec |
t_Declarative , id_7-sec
Ruleapplicationscoping = id_8
id_8-sec = LAMBDA |
id_8;
id_8 = t_Source , id_8_sec |
t_Target,id_8_sec;
Source_Targetrelationship = id_9
id_9-sec = LAMBDA |
id_9;
id_9 = t_New target , _id_9_sec |
Existingtarget , _id_9_sec
Existingtarget = Update |
=Update , t_In_place;
Update = id_10;
id_10 = t_Destructive |
t_Extensiononly;
Rule application strategy = id_11;
id_11-sec = LAMBDA |
id_11;
id_11 = t_Deterministic , id_11_sec |
Non_deterministic , id_11_sec |
t_Interactive , id_11-sec;
Non_deterministic = id_12
id_12_sec = LAMBDA |
id_12;
id_12 = t_Concurrent , id_12-sec |
t_One_point , id_12_sec;
Rulescheduling = Form , Ruleselection |
Form , Ruleselection , RuleIteration |
t_Phasing;
Form = id_13;
id_13-sec = LAMBDA |
id_13;
id_13 = t_Implicit, id_13-sec |
Explicit , id_13-sec;
Explicit = id_14;
id_14 = t_Internal |
t_External;
Ruleselection = id_15;
id_15-sec = LAMBDA |
id_15;
id_15 = t_Explicit condition , id_15_sec |
t_Non-determinism , id_15_sec |
t_Conflict resolution , id_15_sec |
t_Interactive , id_15_sec;
RuleIteration = id_16;
id_16 = t_Recursion |
t_Looping |
t_FixpointIteration;
Ruleorganization = OrganizationalStructure |
OrganizationalStructure , t_Modulatirymechanisms |
Reusemechanisms;
Reusemechanisms = id_17;
id_17-sec = LAMBDA |
id_17;
id_17 = t_Inheritance , id_17_sec |
t_Logicalcomposition , id_17_sec;
OrganizationalStructure = id_18;
id_18 = t_Source_oriented |
t_Target_oriented |
t_Independent;
Tracing = Dedicatedsupport;
Dedicatedsupport = Storagelocation , Control;
Storagelocation = id_19;
id_19 = Model |
t_Separate;
Model = id_20;
id_20_sec = LAMBDA |
id_20;
id_20 = t_Source , id_20_sec |
t_Target,id_20_sec;
Control = id_21;
id_21 = t_Manual |
Automatic;
Automatic = id_22;
id_22 = t_Allrules |
t_Selectedrules;
Directionality = id_23;
id_23_sec = LAMBDA |
id_23;
id_23 = t_Unidirectional , id_23_sec |
Bidirectional , id_23_sec;
Bidirectional = id_24;
id_24 = t_Bidirectionalrules |
t_Complementarypairs;
G.startSymbol = "Model_Transformation"
G.Model_Transformation = alt(seq(V.Transformation_rules,seq(V.Source_Target_relationship,seq(V.Rule_application_strategy,seq(V.Rule_scheduling,seq(V.Rule_organization,seq(V.Tracing,V.Directionality)))))),seq(V.Transformation_rules,seq(V.Source_Target_relationship,seq(V.Rule_application_strategy,seq(V.Rule_scheduling,seq(V.Rule_organization,seq(V.Tracing,seq(V.Directionality,V.Rule_application_scoping))))))))
G.Transformation_rules = alt(V.LHS_RHS,seq(V.LHS_RHS,terminal('t_LHS_RHS_Syntactic_Separation')),terminal('t_Bidirectionality'),terminal('t_Parameterization'),terminal('t_Intermediate_structures'))
G.LHS_RHS = alt(V.Variables,V.id_1)
G.Variables = V.id_0
G.id_0 = alt(terminal('t_Untyped'),terminal('t_Syntactically_typed'),terminal('t_Semantically_typed'))
G.id_1_sec = alt(empty(),V.id_1)
G.id_1 = alt(seq(V.Patterns,V.id_1_sec),seq(V.Logic,V.id_1_sec))
G.Patterns = seq(V.Form_Patt,seq(V.Syntax,V.Typing))
G.Form_Patt = V.id_2
G.id_2 = alt(terminal('t_Strings'),terminal('t_Terms'),terminal('t_Graphs'))
G.Syntax = V.id_3
G.id_3_sec = alt(empty(),V.id_3)
G.id_3 = alt(seq(terminal('t_Abstract'),V.id_3_sec),seq(V.Concrete,V.id_3_sec))
G.Concrete = V.id_4
G.id_4_sec = alt(empty(),V.id_4)
G.id_4 = alt(seq(terminal('t_Textual'),V.id_4_sec),seq(terminal('t_Graphical'),V.id_4_sec))
G.Typing = V.id_5
G.id_5 = alt(terminal('t_Untyped'),terminal('t_Syntactically_typed'),terminal('t_Semantically_typed'))
G.Logic = V.id_6
G.id_6_sec = alt(empty(),V.id_6)
G.id_6 = alt(seq(terminal('t_Non_executable'),V.id_6_sec),seq(V.Executable,V.id_6_sec))
G.Executable = V.id_7
G.id_7_sec = alt(empty(),V.id_7)
G.id_7 = alt(seq(terminal('t_Imperative'),V.id_7_sec),seq(terminal('t_Declarative'),V.id_7_sec))
G.Rule_application_scoping = V.id_8
G.id_8_sec = alt(empty(),V.id_8)
G.id_8 = alt(seq(terminal('t_Source'),V.id_8_sec),seq(terminal('t_Target'),V.id_8_sec))
G.Source_Target_relationship = V.id_9
G.id_9_sec = alt(empty(),V.id_9)
G.id_9 = alt(seq(terminal('t_New_target'),V.id_9_sec),seq(V.Existing_target,V.id_9_sec))
G.Existing_target = alt(V.Update,seq(V.Update,terminal('t_In_place')))
G.Update = V.id_10
G.id_10 = alt(terminal('t_Destructive'),terminal('t_Extension_only'))
G.Rule_application_strategy = V.id_11
G.id_11_sec = alt(empty(),V.id_11)
G.id_11 = alt(seq(terminal('t_Deterministic'),V.id_11_sec),seq(V.Non_deterministic,V.id_11_sec),seq(terminal('t_Interactive'),V.id_11_sec))
G.Non_deterministic = V.id_12
G.id_12_sec = alt(empty(),V.id_12)
G.id_12 = alt(seq(terminal('t_Concurrent'),V.id_12_sec),seq(terminal('t_One_point'),V.id_12_sec))
G.Rule_scheduling = alt(seq(V.Form_RS,V.Rule_selection),seq(V.Form_RS,seq(V.Rule_selection,V.Rule_Iteration)),terminal('t_Phasing'))
G.Form_RS = V.id_13
G.id_13_sec = alt(empty(),V.id_13)
G.id_13 = alt(seq(terminal('t_Implicit'),V.id_13_sec),seq(V.Explicit,V.id_13_sec))
G.Explicit = V.id_14
G.id_14 = alt(terminal('t_Internal'),terminal('t_External'))
G.Rule_selection = V.id_15
G.id_15_sec = alt(empty(),V.id_15)
G.id_15 = alt(seq(terminal('t_Explicit_condition'),V.id_15_sec),seq(terminal('t_Non_determinism'),V.id_15_sec),seq(terminal('t_Conflict_resolution'),V.id_15_sec),seq(terminal('t_Interactive'),V.id_15_sec))
G.Rule_Iteration = V.id_16
G.id_16 = alt(terminal('t_Recursion'),terminal('t_Looping'),terminal('t_Fixpoint_Iteration'))
G.Rule_organization = alt(V.Organizational_Structure,seq(V.Organizational_Structure,terminal('t_Modulatiry_mechanisms')),V.Reuse_mechanisms)
G.Reuse_mechanisms = V.id_17
G.id_17_sec = alt(empty(),V.id_17)
G.id_17 = alt(seq(terminal('t_Inheritance'),V.id_17_sec),seq(terminal('t_Logical_composition'),V.id_17_sec))
G.Organizational_Structure = V.id_18
G.id_18 = alt(terminal('t_Source_oriented'),terminal('t_Target_oriented'),terminal('t_Independent'))
G.Tracing = V.Dedicated_support
G.Dedicated_support = seq(V.Storage_location,V.Control)
G.Storage_location = V.id_19
G.id_19 = alt(V.Model,terminal('t_Separate'))
G.Model = V.id_20
G.id_20_sec = alt(empty(),V.id_20)
G.id_20 = alt(seq(terminal('t_Source'),V.id_20_sec),seq(terminal('t_Target'),V.id_20_sec))
G.Control = V.id_21
G.id_21 = alt(terminal('t_Manual'),V.Automatic)
G.Automatic = V.id_22
G.id_22 = alt(terminal('t_All_rules'),terminal('t_Selected_rules'))
G.Directionality = V.id_23
G.id_23_sec = alt(empty(),V.id_23)
G.id_23 = alt(seq(terminal('t_Unidirectional'),V.id_23_sec),seq(V.Bidirectional,V.id_23_sec))
G.Bidirectional = V.id_24
G.id_24 = alt(terminal('t_Bidirectional_rules'),terminal('t_Complementary_pairs'))
- Results using the terminal coverage criterion
Execution |
MaxDerivlen |
Run Time |
Non-Terminal Covered |
Terminal Covered |
Production Covered |
Sentences |
1 |
5 |
0:00.14 |
55.55% |
64% |
|
23 |
2 |
6 |
0:00.09 |
66.66% |
78% |
|
30 |
3 |
7 |
0:00.09 |
76.38% |
84% |
|
33 |
4 |
8 |
0:00.10 |
87.50% |
92% |
|
36 |
5 |
9 |
0:00.14 |
91.66% |
96% |
|
38 |
6 |
10 |
0:00.13 |
95.83% |
100% |
|
40 |
- Results using the production coverage criterion
Execution |
MaxDerivlen |
Run Time |
Non-Terminal Covered |
Terminal Covered |
Production Covered |
Sentences |
1 |
5 |
0:01.02 |
55.55% |
|
49.23% |
24 |
2 |
6 |
0:11.69 |
66.66% |
|
63.84% |
35 |
3 |
7 |
0:00.62 |
76.38% |
|
74.61% |
41 |
4 |
8 |
0:00.26 |
91.66% |
|
87.69% |
49 |
5 |
9 |
0:00.51 |
95.83% |
|
93.07% |
52 |
6 |
10 |
0:00.65 |
100% |
|
98.46% |
57 |
7 |
11 |
0:00.75 |
100% |
|
99.23% |
58 |
8 |
12 |
0:00.78 |
100% |
|
100% |
59 |