Examples

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;
  • Lua specification
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;
  • Lua specification
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;
  • Lua specification
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;
  • Lua specification
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;
  • Lua specification
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
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License