1
我正在阅读VDM ++语言手册。我的问题是在某些情况下他使用“;”在声明的结尾,在某个地方,他没有使用“;”。VDM ++语言分号
下面的例子
public Top :() ==> Elem
Top() ==
return (hd stack);
if test
then OpCall()
else return FunCall()
我正在阅读VDM ++语言手册。我的问题是在某些情况下他使用“;”在声明的结尾,在某个地方,他没有使用“;”。VDM ++语言分号
下面的例子
public Top :() ==> Elem
Top() ==
return (hd stack);
if test
then OpCall()
else return FunCall()
分号在VDM分离器,而不是终结,因为它们是在Java和C。所以你需要的分号,其中两件事情是按顺序排列,如两个定义或两个陈述。但是,如果“块”中只有一个东西,则不需要分隔符。
所以,你的第一个例子可能如果另一个定义如下,则需要尾随分号,但如果“顶”是类/模块中的最后一个定义,则不需要。
第二个示例在OpCall()之后不需要分号,因为它是“then”子句中的单个语句。你可能可能 FunCall()后面需要一个分号,如果这个if/then/else后面跟着另一个语句,但不是。
话虽如此,VDMJ解析器是宽容的,并将允许在某些地方虚假的分号,即使它们是严格不需要的。
那么我们怎么知道声明在哪里结束?实际上我试图将vdm +代码转换为C++语言。 谢谢。 – 2013-03-24 15:06:09
如果您正在进行VDM ++/C++翻译,则必须解析VDM ++,因为我假设您正在执行此操作。所以一个“语句”是一个单独的语句(没有分号)或一个块(在语句之间有分号,并且在该块之后没有分号)。除了每个定义序列位于诸如“类型”,“值”,“操作”等关键字之间外,与外部层次的定义类似。如果序列中有多个关键字,则需要分号分隔;并且在序列中最后一个之后你不需要一个。 – 2013-03-25 09:17:08
非常感谢4的帮助。 – 2013-03-25 14:33:11