将语言的语法(用ANTLR编写)转换成形式语言/数学符号

时间:2013-04-13 16:42:05

标签: antlr formal-languages formal-methods

在我目前的项目中,我的老板已经分配了一份工作,用于将域特定语言的语法(用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语法本身都是一个正式的规范。我不知道 - 我如何指定这种语法是正式的方式。你能不能指点把上面的语法写成正式的规范/数学符号?

1 个答案:

答案 0 :(得分:4)

是的,ANTLR语法是一个正式的系统。基于此,你可以直接宣布胜利。

他可能想要除ANTLR语法以外的其他东西。而且,理所当然地,ANTLR语法中用于构建树木等的注释只会混淆问题,各种前瞻也是如此。所以,在你的鞋子里,我会删除所有注释,并可能将语法重新编入IEEE EBNF(参见http://en.wikipedia.org/wiki/Extended_Backus%E2%80%93Naur_Form)。你可以将他指向那个网页,并声明你有一个“纯语境免费语法”。