阅读此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
。因此,我不知道编译器如何声称缺少;
afterend
关键字,如以下示例所示:
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编译器,都会给出一个错误。
结束后不必使用分号。就那么简单。
分号用于分隔语句。因此,如果不是最后一条语句,则只需要在结束后加上分号即可。如果是最后一条语句,则应改为句号。
现在,BNF中可能还存在一些错误,这意味着根据BNF,您不必在实际需要的地方使用分号,但找出这一点的唯一方法是分析整个BFN细节,我觉得这不是建设性的。:-)
但是在这种情况下,我认为您错过的是过程或函数声明必须以分号结尾。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句