【发布时间】:2012-08-03 02:17:49
【问题描述】:
我正在尝试实现一个尝试符合this specification 子集的前端。
似乎很多东西都在参考中明确定义了,除了<LINE-START>和<LINE-END>,它们仍然经常使用。
这是一个引文:“为了便于说明,能够方便地明确引用紧接在逻辑行开头之前的点和紧接在逻辑行的最终行终止符之前的点。这个使用<LINE-START> 和<LINE-END> 作为VBA 语法的终端符号来完成。<LINE-START> 被定义为紧接在每个逻辑行之前,<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>?
【问题讨论】:
-
欢迎使用基于真实文档的您自己的词法分析器和解析器。实施此类设备所需的大部分精力是由于规范缺乏精确性造成的,其次是实际实施与指定的任何差异,您可以通过反复试验来发现和修复。
标签: compiler-construction ocaml lex lexer