我无法解决一个看似的简单问题。我有一个文件,有一个行标题和一些正文:
File: [file name] generated by [tool name], Version [version] ... file body ...
我需要从此文件中提取文件名,工具名称和版本,然后根据这些值对正文执行某些操作。请记住,名称可以包含任意符号,包括空格和标点符号。
到目前为止,我提出的最接近的是:
Lexer.g4
sbrk
Parser.g4
lexer grammar Lexer;
FILE : 'File: ';
TOOL : ' generated by ';
VERSION : ', Version';
HEND : NL -> pushMode(BODY);
STRING : .+?;
NL : '\r'? '\n' | '\r';
mode BODY;
TEXT : .*? EOF -> popMode;
此解析器的唯一问题是它将文件名,工具名称和版本表示为单字符标记的列表,而不是整个字符串的单个标记。删除' +'在STRING +规则中导致完全失败。