删除空格,但最后还是删除吗?

发布于 2024-08-13 16:28:24 字数 95 浏览 2 评论 0原文

我正在尝试解析 Lua,它在某些情况下依赖于空格,因为它不使用大括号作为范围。我认为只有当另一个规则不匹配时才抛出空格是最好的方法,但我不知道如何做到这一点。有人可以帮助我吗?

I am attempting to parse Lua, which depends on whitespace in some cases due to the fact that it doesn't use braces for scope. I figure that by throwing out whitespace only if another rule doesn't match is the best way, but i have no clue how to do that. Can someone help me?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

旧伤还要旧人安 2024-08-20 16:28:24

看看Lua的文档,我发现没有必要考虑空格。

解析器规则 ifStatement:

ifStatement
    :    'if' exp 'then' block ('elseif' exp 'then' block 'else' block)? 'end'
    ;

exp
    :    /* todo */
    ;

block
    :    /* todo */
    ;

应匹配:

if j==10 then print ("j equals 10") end

和:

if j<10 then
    print ("j < 10")
elseif j>100 then
    print ("j > 100")
else
    print ("j >= 10 && j <= 100")
end

无需考虑空格,AFAIK。 添加:

Space
    :    (' ' | '\t' | '\r' | '\n'){$channel=HIDDEN;}
    ;

所以你可以在你的语法中

编辑

ANTLR wiki上似乎有一个Lua语法: http://www.antlr.org/grammar/1178608849736/Lua.g

看来我对 if 语句的建议与上面的语法略有不同:

'if' exp 'then' block ('elseif' exp 'then' block)* ('else' block)? 'end'

正如你所看到的,这是正确的。

Looking at Lua's documentation, I see no need to take spaces into account.

The parser rule ifStatement:

ifStatement
    :    'if' exp 'then' block ('elseif' exp 'then' block 'else' block)? 'end'
    ;

exp
    :    /* todo */
    ;

block
    :    /* todo */
    ;

should match both:

if j==10 then print ("j equals 10") end

and:

if j<10 then
    print ("j < 10")
elseif j>100 then
    print ("j > 100")
else
    print ("j >= 10 && j <= 100")
end

No need to take spaces into account, AFAIK. So you can just add:

Space
    :    (' ' | '\t' | '\r' | '\n'){$channel=HIDDEN;}
    ;

in your grammar.

EDIT

It seems there is a Lua grammar on the ANTLR wiki: http://www.antlr.org/grammar/1178608849736/Lua.g

And it seems I my suggestion for an if statement slightly differs from the grammar above:

'if' exp 'then' block ('elseif' exp 'then' block)* ('else' block)? 'end'

which is the correct one, as you can see.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文