【发布时间】:2014-06-22 22:57:59
【问题描述】:
阅读this Pascal BNF 语法我不明白为什么在函数定义中; 必须出现在end 之后。看到函数标题后,可能会出现function-block,即block:
function-declaration =
function-heading ";" function-body |
function-heading ";" directive |
function-identification ";" function-body .
function-body =
block .
当出现begin 时,那是statement-par 的一部分,那是块的一部分,它由statement-part 处理,对吧?
block =
declaration-part statement-part .
statement-part =
begin statement-sequence end .
注意statement-part。在end 关键字之后没有;,这不是statement-sequence 的一部分。所以,我不明白编译器如何声称在 end 关键字之后缺少 ;,就像在这个例子中一样:
function myabs(i : integer) : integer;
begin
if i < 0 then begin i := -i; end; < -- it's process by statement-sequence, so, ';' may appear
myabs := i;
end; <-- it is the semicolon what about I'm speaking
我错过了什么?我读错语法了吗?如果我忽略它,我尝试过的所有 Pascal 编译器都会报错。
【问题讨论】:
-
在同一个链接中,它具有将
function-declaration和function-body组合在一起的部分,即:procedure-and-function-declaration-part = { (procedure-declaration | function-declaration) ";" } .这就是分号所在的位置。 -
为什么是-1?请不要投票者解释一下?