匹配 cpp-peglib 中的换行符

Match newline character in cpp-peglib

所以我尝试使用 cpp-peglib 在 C++ 中匹配单行注释。注释以 # 字符开头,后跟任意字符序列,并以换行符结束。我尝试了不同的方法但没有成功。似乎解析器无法匹配换行符,要么是我的语法错误,要么是我的字符串中的换行符被莫名其妙地删除了。

这是一个让你入门的小例子

std::string text = "# this is a comment\n # this is another comment";

// define grammar
auto grammar = R"(
    Start       <- (Comment)*
    Comment     <- '#' .+ EOL
    EOL         <- [\r\n]
)";

// setup parser
peg::parser parser;
parser.log = [](size_t line, size_t col, const std::string& msg) {
    std::cerr << line << ":" << col << ": " << msg << "\n";
};
auto ok = parser.load_grammar(grammar);
assert(ok);

// define parser rules
parser["Comment"] = [](const peg::SemanticValues& sv) {
    std::cout << "Comment: '" << sv.token()  << "'" << std::endl;
};

// parse file
parser.parse(text.c_str());

抱歉回复晚了。以下代码对我有用。希望对你有帮助。

// define grammar
auto grammar = R"(
    Start        <-  Comment*
    Comment      <-  [ \t\r\n]+ / LineComment
    LineComment  <-  '#' (!LineEnd .)* &LineEnd
    LineEnd      <-  '\r\n' / '\r' / '\n' / !.
)";