在我目前的项目中,我的老板已经分配了一份工作,用于将域特定语言的语法(用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语法本身都是一个正式的规范。我不知道 - 我如何指定这种语法是正式的方式。你能不能指点把上面的语法写成正式的规范/数学符号?
答案 0 :(得分:4)
是的,ANTLR语法是一个正式的系统。基于此,你可以直接宣布胜利。
他可能想要除ANTLR语法以外的其他东西。而且,理所当然地,ANTLR语法中用于构建树木等的注释只会混淆问题,各种前瞻也是如此。所以,在你的鞋子里,我会删除所有注释,并可能将语法重新编入IEEE EBNF(参见http://en.wikipedia.org/wiki/Extended_Backus%E2%80%93Naur_Form)。你可以将他指向那个网页,并声明你有一个“纯语境免费语法”。