2013-03-22 43 views
1

我正在阅读VDM ++语言手册。我的问题是在某些情况下他使用“;”在声明的结尾,在某个地方,他没有使用“;”。VDM ++语言分号

下面的例子

public Top :() ==> Elem 
Top() == 
return (hd stack); 


if test 
then OpCall() 
else return FunCall() 

回答

1

分号在VDM分离器,而不是终结,因为它们是在Java和C。所以你需要的分号,其中两件事情是按顺序排列,如两个定义或两个陈述。但是,如果“块”中只有一个东西,则不需要分隔符。

所以,你的第一个例子可能如果另一个定义如下,则需要尾随分号,但如果“顶”是类/模块中的最后一个定义,则不需要。

第二个示例在OpCall()之后不需要分号,因为它是“then”子句中的单个语句。你可能可能 FunCall()后面需要一个分号,如果这个if/then/else后面跟着另一个语句,但不是。

话虽如此,VDMJ解析器是宽容的,并将允许在某些地方虚假的分号,即使它们是严格不需要的。

+0

那么我们怎么知道声明在哪里结束?实际上我试图将vdm +代码转换为C++语言。 谢谢。 – 2013-03-24 15:06:09

+0

如果您正在进行VDM ++/C++翻译,则必须解析VDM ++,因为我假设您正在执行此操作。所以一个“语句”是一个单独的语句(没有分号)或一个块(在语句之间有分号,并且在该块之后没有分号)。除了每个定义序列位于诸如“类型”,“值”,“操作”等关键字之间外,与外部层次的定义类似。如果序列中有多个关键字,则需要分号分隔;并且在序列中最后一个之后你不需要一个。 – 2013-03-25 09:17:08

+0

非常感谢4的帮助。 – 2013-03-25 14:33:11