1

在我目前的项目中,我的老板分配了一项将领域特定语言的语法(用 ANTLR 编写)表达为正式语言/符号的工作。例如,以下是一小段语法代码。

     vocabSpec : 'resources' ':' resources_def ;   // Resource definition 

     resources_def :
          'sensors' ':'   (sensor_def)+   // Sensor definition
          'actuators' ':' (actuator_def)+  // Actuator definition       
         ;

     sensor_def:
        CAPITALIZED_ID  
        (sensorMeasurement_def ';')* ;

      sensorMeasurement_def : 'generate' lc_id ':'  CAPITALIZED_ID ;

    // Actuator definition : Actuator name, actions and its parameters 

      actuator_def: CAPITALIZED_ID  (action_def ';')* ;

      action_def: 'action' CAPITALIZED_ID '(' (parameter_def)? ')'  ;

      parameter_def :  lc_id ':'  CAPITALIZED_ID (',' parameter_def )?  ;

      lc_id: ID ;

      ID  : 'a'..'z'  ('a'..'z' | 'A'..'Z' )* ;

      CAPITALIZED_ID: 'A'..'Z' ('a'..'z' | 'A'..'Z' )*;

据我所知,任何语言的 ANTLR 语法本身就是一个正式的规范。我不知道——我怎样才能指定这个语法是正式的方式。您能否给我一些将上述语法写入正式规范/数学符号的指示?

4

1 回答 1

4

是的,ANTLR 语法是一个正式的系统。以此为基础,你就可以板着脸宣布胜利了。

他可能想要 ANTLR 语法以外的东西。而且,理所当然地,ANTLR 语法中用于构建树等的注释只是混淆了这个问题,各种前瞻也是如此。因此,在您的情况下,我会删除所有注释,并可能将语法重新转换为 IEEE EBNF(请参阅http://en.wikipedia.org/wiki/Extended_Backus%E2%80%93Naur_Form)。您可以将他指向该网页,并声明您拥有“纯上下文无关语法”。

于 2013-04-13T17:23:10.213 回答