5

我正在尝试实现一个前端,它试图符合本规范的一个子集。

似乎很多东西在参考文献中都有明确的定义,除了<LINE-START><LINE-END>,它们仍然经常使用。

这是一个引文:“为了便于说明,能够方便地明确引用紧接在逻辑行开头之前的点和紧接在逻辑行的最终行终止符之前的点。这是通过使用来完成的<LINE-START><LINE-END>作为 VBA 语法的终结符号。A<LINE-START>被定义为紧接在每个逻辑行之前,而 a<LINE-END>被定义为替换<line-terminator>每个逻辑行末尾的

这里有些例子:

line-terminator = (%x000D %x000A) / %x000D / %x000A / %x2028 / %x2029
line-continuation = *WSC underscore *WSC line-terminator
WS = 1*(WSC / line-continuation)

EOL = [WS] LINE-END
logical-line = LINE-START *extended-line LINE-END

if-statement = LINE-START “If” boolean-expression “Then” EOL
               statement-block
               *[else-if-block]
               [else-block]
               LINE-START ((“End” “If”) / “EndIf”)

else-if-block = LINE-START “ElseIf” boolean-expression “Then” EOL
                LINE-START statement-block

else-block = LINE-START “Else” statement-block

有谁知道在哪里以及如何定义<LINE-START><LINE-END>

4

2 回答 2

1

鉴于文档中描述的多种语言,我希望行开始和行结束的定义成为表 3.2.2 逻辑行语法的一部分,如果它们是(如文档其他地方所建议的)标记。正如您所说,它们的定义不是很清楚。

还有另一种可能。这些术语的使用方式类似于 BOF/EOF。这表明它们是状态,独立于使用的令牌系统。如果是这种情况,当适当的条件成立时,您需要将它们定义为解析器的一部分。定义将取决于几个因素 - 文件中的位置;上一个、当前以及可能是下一个令牌。(例如,Start Line 是文档需要进入的状态,在从 End Line 状态推进之后,但如果也是 EOF 则不是)。这些规则必须从给定的(不完整的)定义和适当的假设中推导出来。

这不是一个完整的答案,但鉴于规范在这一点上的模糊性,以及这些令牌的多种用法?/状态?我发现很难看到如何给出更完整的答案。HTH。

于 2012-08-08T04:44:14.417 回答
0

在 VBA 中,您可以编写该命令

Dim from
Dim to
FakeTest from, to

LINE-START 是指行的开头,但在行的第一个单词之前,而不是最开始的行。

此外,LINE-END 指的是行尾,但不是这样,因为您可以在行尾之前添加空格和制表符。

请注意,VBA 中的空格被识别为有效的分隔符,以区分两个单词,尤其是在调用方法时:

CallMethod param1, param2, _
           param3

如果有结果,VBA 不允许插入括号,如您在该示例中所见:

result = CallAMethod(param1, param2)

此外,您不需要添加分号或冒号来分隔语句。

我说:空格和制表是语言语法的一部分。在其他编程语言中情况并非如此。

于 2012-08-11T20:15:01.493 回答