匹配 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' / !.
)";
所以我尝试使用 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' / !.
)";