我正在尝试为Lua创建ANTLR分析器。所以我把Nicolai Mainero制作的语法(可在ANTLR的网站上找到,Lua 5.1语法)并开始工作。ANTLR Lua长字符串语法规则
语法很好。有一件事不起作用:长字符串。
的Lua规范规则:文字
串也可以使用由长括号包围的 长格式定义。 我们定义一个开放长支架 级别n作为开放方括号 后跟n个等号,然后是 另一个开放方括号。所以,一个 0级的开放长括号是 写成[[,一级开放长括号 等级1写为[= [等 上。一个结束长支架的定义类似于 ;例如,关闭 等级4的长括号写为 ] ====]。长字符串以任何级别的 开头长支架开始,并且 以同级的第一次结束长支架 结束。括号内的这个 文字可以运行几行 行,不解释任何转义 序列,忽略任何其他级别的长括号 。他们可以包含 任何东西,除了结束括号 适当的水平,适当的水平。
我的问题接近this,但工具是不同的。
LONGSTRING的一些小例子:
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规则?谢谢!
不要忘记漫长的评论。它们就像长字符串一样,但是以' - [['开始并以']]结尾。当然他们也允许有0个或更多的'='符号,以便它们可以明确地嵌套。 – RBerteig 2010-11-02 09:21:48
@Rerteig,好点。在我的回答中,我没有具体提及它们,但是它们在我发布的语法片段中正确处理。 – 2010-11-02 10:26:09
@Bart,只要你的评论规则处理'“ - ”'后面跟着没有空白的“LONGSTRING”。 – RBerteig 2010-11-02 19:09:47