【发布时间】:2010-10-31 21:51:14
【问题描述】:
我正在尝试为 Lua 创建 ANTLR 解析器。所以我采用了 Nicolai Mainero 制作的语法(可在 ANTLR 的网站上获得,Lua 5.1 语法)并开始工作。
语法很好。一件事不起作用:长字符串。
Lua 规范规则:字面量
字符串也可以使用 长括号括起来的长格式。 我们定义了一个长括号 第 n 级作为左方括号 后跟 n 个等号,后跟 另一个左方括号。所以,一个 0 级的开长括号是 写成 [[,一个左长括号 1 级的写成 [=[,所以 在。定义了一个闭合长括号 相似地;例如,关闭 4级的长括号写为 ]====]。长字符串以 打开任何级别的长括号和 结束于第一个闭合长括号 同级别的。这里面的字数 括号形式可以运行多个 行,不要解释任何转义 序列,并忽略长括号 任何其他级别。它们可以包含 除了右括号之外的任何东西 适当的水平。适当的水平。
我的问题与this 的含义很接近,但工具不同。
LONGSTRING 的一些小例子:
local a = [==[ Some interesting string [=[ sub string in string ]=] [hello indexes] [[And some line strings]] ]==] - its correct string.
local f = [==[ Not interesting string ]=] - incorrect string
这是我对不带“=”符号的 LONGSTRING 的规则:
LONGSTRING: '[[' (~(']') | ']'(~(']')))* ']]';
有人可以帮助我吗?谢谢!
【问题讨论】:
-
不要忘记长 cmets。它们就像长字符串,但以
--[[开头并以]]结尾。当然,它们也允许使用 0 个或多个=符号,以便它们可以明确嵌套。 -
@RBerteig,说得好。我没有在回答中具体提及它们,但它们在我发布的语法的 sn-p 中得到了妥善处理。
-
@Bart,是的,只要您的评论规则处理
"--"后跟LONGSTRING而没有空格。
标签: parsing lua antlr lexer antlr3