微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

处理以空格开头的字符串

如何解决处理以空格开头的字符串

我正在尝试使用以下规则集创建 ANTLR v4 语法:

1.如果一行以@开头,就被认为是一个标签

@label

2.如果该行以cmd开头,则视为命令

cmd param1 param2
 

3.如果一行以空格开头,则视为字符串。应提取所有文本。字符串可以是多行的,所以它们以空行结束

 A long string with multiline support
 and any special characters one can imagine.
<-empty line here->
    

4.最后,如果一行的开头不是空格,@cmd,那么它的第一个单词应该被视为标题

heading A long string with multiline support
 and any special characters one can imagine.
<-empty line here->
    

处理标签和命令很容易。但我对字符串和标题一无所知。 分隔 whitespace word whitespace whatever doubleNewlinewhatever doubleNewline 的最佳方法是什么?我见过很多带有空格的示例,但它们都不适用于随机文本和换行符。我不希望你为我编写实际的代码。建议一种方法就行了。

解决方法

这样的事情应该可以解决问题:

lexer grammar DemoLexer;

LABEL
 : '@' [a-zA-Z]+
 ;

CMD
 : 'cmd' ~[\r\n]+
 ;

STRING
 : ' ' .*? NL NL
 ;

HEADING
 : ( ~[@ \t\r\nc] | 'c' ~'m' | 'cm' ~'d' ).*? NL NL
 ;

SPACE
 : [ \t\r\n] -> skip
 ;

OTHER
 : .
 ;

fragment NL
 : '\r'? '\n'
 | '\r'
 ;

这并不强制要求“行首”要求。如果这是你想要的东西,你就必须在你的语法中添加语义谓词,这将它与目标语言联系起来。对于 Java,这看起来像这样:

LABEL
 : {getCharPositionInLine() == 0}? '@' [a-zA-Z]+
 ;

见:

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。