不同的程序实现可以具有相同的程序语义吗?

时间:2016-03-08 12:34:28

标签: semantics

因此,对于任何给定的语言,如果我们实现相同的程序(即任何给定输入的相同输出)两次,使用不同的语法(即使用i++而不是i+1)两个程序将具有相同的语义?为什么? 如果我们使用不同的结构(即Arrays vs Arraylists),是否同样适用?

由于

2 个答案:

答案 0 :(得分:1)

是。根据编程语言,可以存在具有相同语义的不同语法结构(组合)。

例如,我们可以使用3种结构定义一种编程语言:AB,两者在语义上是等价的,以及组合(例如XY用于任何X }和Y其中任何一个都可以是AB或其任何组合。因此,程序A等同于程序B。此外AA等于ABBABB等。

此外,如果我们使用语义上等同于C的{​​{1}}来扩展语言,那么,例如,AA等同于BC等。

答案 1 :(得分:1)

  

因此,对于任何给定的语言,如果我们两次使用不同的语法(即使用i ++而不是i + 1)实现相同的程序(即任何给定输入的相同输出)两个程序是否具有相同的语义?

这个问题是同义反复。答案是肯定的。明显。

如果两个不同的程序为所有可能的输入集产生相同的结果,那么它们 do 具有相同的语义。根据定义 1

  

为什么?

因为那是“相同的语义”的意思!

  

如果我们使用不同的结构(即Arrays vs Arraylists),是否同样适用?

(一个数据结构可能会使用更多内存,这可能导致OOME用于一个版本而不是另一个版本...对于某些输入数据集。但是我认为这些程序不会产生相同的结果输入。)

请注意,这适用于所有实用的编程语言。任何只能以单向编写程序的编程语言......可能限制太多而无法使用。

1 - 好的,所以研究编程语义的人在阅读时可能会很合适。但我试图提供一个直观的解释,而不是一个具有良好的数学基础的解释。课程的马......正如他们所说的那样。