在我目前的项目中,我的老板分配了一项工作,将领域特定语言的语法(用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语法本身都是一种形式规范。我不知道--我怎么才能指定这个语法是正式的。你能给我一些将上述语法写成形式规格说明/数学符号的建议吗?
发布于 2013-04-13 17:23:10
是的,ANTLR语法是一个正式的系统。基于这一点,你可以板着脸宣布胜利。
他可能想要的不是ANTLR语法。而且,理所当然地,ANTLR语法中用于构建树的注释,等等,就像各种lookahead一样,使问题变得混乱。因此,在您的情况下,我会删除所有注释,并可能将语法重新转换为IEEE EBNF (参见http://en.wikipedia.org/wiki/Extended_Backus%E2%80%93Naur_Form)。你可以把他指向那个网页,并宣称你有一个“纯上下文无关文法”。
https://stackoverflow.com/questions/15990221
复制