处理以空格开头的字符串
Handle strings starting with whitespaces
我正在尝试使用以下规则集创建 ANTLR v4 语法:
1.In 如果一行以@开头,则认为是一个标签:
@label
2.In 如果该行以 cmd 开头,则将其视为命令
cmd param1 param2
3.If 一行以空格开头,它被认为是一个字符串。应提取所有文本。字符串可以是多行的,所以它们以空行结尾
A long string with multiline support
and any special characters one can imagine.
<-empty line here->
4.Lastly,如果一行不是以空格开头,@
和 cmd
,它的第一个单词应该被视为标题。
Heading A long string with multiline support
and any special characters one can imagine.
<-empty line here->
很容易处理标签和命令。但我对字符串和标题一无所知。
分隔 whitespace word whitespace whatever doubleNewline
和 whatever doubleNewline
的最佳方法是什么?我见过很多带有空格的示例,但其中 none 可以同时处理随机文本和换行符。我不希望您为我编写实际代码。建议一种方法即可。
像这样应该可以解决问题:
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]+
;
参见:
- Semantic predicates in ANTLR4?
- https://github.com/antlr/antlr4/blob/master/doc/predicates.md
我正在尝试使用以下规则集创建 ANTLR v4 语法:
1.In 如果一行以@开头,则认为是一个标签:
@label
2.In 如果该行以 cmd 开头,则将其视为命令
cmd param1 param2
3.If 一行以空格开头,它被认为是一个字符串。应提取所有文本。字符串可以是多行的,所以它们以空行结尾
A long string with multiline support
and any special characters one can imagine.
<-empty line here->
4.Lastly,如果一行不是以空格开头,@
和 cmd
,它的第一个单词应该被视为标题。
Heading A long string with multiline support
and any special characters one can imagine.
<-empty line here->
很容易处理标签和命令。但我对字符串和标题一无所知。
分隔 whitespace word whitespace whatever doubleNewline
和 whatever doubleNewline
的最佳方法是什么?我见过很多带有空格的示例,但其中 none 可以同时处理随机文本和换行符。我不希望您为我编写实际代码。建议一种方法即可。
像这样应该可以解决问题:
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]+
;
参见:
- Semantic predicates in ANTLR4?
- https://github.com/antlr/antlr4/blob/master/doc/predicates.md