我对是否允许以下内容感到困惑:
(我在 forloop 规则中使用声明,但是声明也定义了如何声明其他内容。这可能会在以后的错误中检查编译器?我清楚了吗?)
declaration :
operand ASSIGNMENTOPERATOR variable var_type CONST?
|operations ASSIGNMENTOPERATOR variable var_type CONST?
|funcall ASSIGNMENTOPERATOR variable var_type CONST?
|(funcall|operand|NOINDEXARRAY) ASSIGNMENTOPERATOR variable var_type ARRAY CONST? ;
forloop :
block
(LPARENS ((number_operation ASSIGNMENTOPERATOR variable)|number_functions)
SEMICOLON bool_operation
SEMICOLON declaration
RPARENS
)
'for'
;
UPDATE:我知道当我在for循环中提供正确的声明类型时它会起作用。问题是如果我不这样做会发生什么?
答案 0 :(得分:0)
您的想法似乎是一个语义阶段,这在解析器设置中非常典型。解析输入只是工作的一小部分。通常,您在此之后有一步来验证您的解析树(例如,查找重复的变量名称或未知符号并检查其他条件)。这通常称为语义阶段(解析是句法阶段)。
您可以将此语义阶段用于所有类型的错误检查,包括declaration
检查(无论您想要检查哪些内容,您的问题都不清楚)。