将一种语言的语法(用ANTLR编写)转换为正式语言/数学符号
在我当前的项目中,我的老板分配了一项工作,将领域特定语言的语法(用ANTLR编写)表达为正式语言/符号。例如,下面是一个小的语法代码片段将一种语言的语法(用ANTLR编写)转换为正式语言/数学符号,antlr,formal-languages,formal-methods,Antlr,Formal Languages,Formal Methods,在我当前的项目中,我的老板分配了一项工作,将领域特定语言的语法(用ANTLR编写)表达为正式语言/符号。例如,下面是一个小的语法代码片段 vocabSpec : 'resources' ':' resources_def ; // Resource definition resources_def : 'sensors' ':' (sensor_def)+ // Sensor definition 'actuators'
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语法本身就是一种形式规范。我不知道--我怎样才能以正式的方式指定这种语法。你能给我一些把上述语法写成形式规范/数学符号的方法吗?是的,ANTLR语法是一种形式系统。基于此,你可以直面宣布胜利
他可能想要的不是ANTLR语法。正确地说,ANTLR语法中用于构建树等的注释只是混淆了问题,各种lookaheads也是如此。因此,在您看来,我将删除所有注释,并可能将语法重新编入IEEE EBNF(请参阅)。你可以把他指向那个网页,然后声明你有一个“纯上下文无关语法”。是的,ANTLR语法是一个正式的系统。基于此,你可以直面宣布胜利
他可能想要的不是ANTLR语法。正确地说,ANTLR语法中用于构建树等的注释只是混淆了问题,各种lookaheads也是如此。因此,在您看来,我将删除所有注释,并可能将语法重新编入IEEE EBNF(请参阅)。你可以把他指向那个网页,并声明你有一个“纯上下文无关语法”。非常感谢Ira Baxter的指点。你能给我一些建议吗?我如何将上述语法指定为数学概念?为什么你认为这些不是数学概念?我相信上述语法中嵌入了关键字(如“资源”、“操作”、“生成”)。它们不够通用,不能用于设计其他领域特定的语言。如果我错了,请纠正我。弄清楚你在问什么问题。你想要“一个更数学化的ANTLR版本”;我告诉过你一个办法。关于“关键字‘资源’与设计DSL有什么关系”的问题与最初的问题相去甚远,我将忽略它。对不起,Ira Baxter,我不同意你的观点。我已经表达了我对“数学概念”的兴趣。非常感谢Ira Baxter的指点。你能给我一些建议吗?我如何将上述语法指定为数学概念?为什么你认为这些不是数学概念?我相信上述语法中嵌入了关键字(如“资源”、“操作”、“生成”)。它们不够通用,不能用于设计其他领域特定的语言。如果我错了,请纠正我。弄清楚你在问什么问题。你想要“一个更数学化的ANTLR版本”;我告诉过你一个办法。关于“关键字‘资源’与设计DSL有什么关系”的问题与最初的问题相去甚远,我将忽略它。对不起,Ira Baxter,我不同意你的观点。我已经表达了对“数学概念”的兴趣。