首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Pest.rs,我如何指定注释是锚定的和整行的?

使用Pest.rs,我如何指定注释是锚定的和整行的?
EN

Stack Overflow用户
提问于 2021-03-20 20:57:40
回答 1查看 427关注 0票数 3

Exim使用了一种非常笨拙的注释语法,

文件中的空行和以#字符开头的行(忽略前导空格)被视为注释并被忽略。#注释:除行首处以外的字符不被特别处理,并且不引入注释.

这意味着

代码语言:javascript
复制
# This is is a comment
This has no comments # at all

有办法用Pest.rs来反映这一点吗?我试过这个,

代码语言:javascript
复制
COMMENT    = { "#" ~ (!NEWLINE ~ ANY)* ~ NEWLINE }
WHITESPACE = _{ " " }
main       = { SOI ~ ASCII_ALPHA* ~ EOI }

但是,这将与

代码语言:javascript
复制
MyText # Exim test this is not a comment 

我怎样才能把评论锚定在左边?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-20 21:33:22

这在默认的COMMENT扩展中是不可能的,因为它是扩展到除了原子。的。以下两行是相同的,

代码语言:javascript
复制
a = { b ~ c }
a = { b ~ WHITESPACE* ~ (COMMENT ~ WHITESPACE*)* ~ c }

这实际上意味着,如果要使用~COMMENT,就必须将规则限制在$

相反,对于基于行的语法,我最终改进了它,而不使用COMMENT宏。而是定义我自己的宏_COMMENT,以避免正常展开为非原子标记,

代码语言:javascript
复制
WHITESPACE = _{ " " }
_COMMENT   = { "#" ~ (!NEWLINE ~ ANY)* ~ NEWLINE }
expr       = { ASCII_ALPHA+ }
stmt       = { expr ~ NEWLINE }
conf       = { SOI ~ (stmt | _COMMENT | NEWLINE)+ ~ EOI }

注意,这里stmt_COMMENT都是NEWLINE终止的,而conf包括一个或多个。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66726411

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档