【发布时间】:2019-04-19 03:41:30
【问题描述】:
我要解析模板字符串:
`Some text ${variable.name} and so on ... ${otherVariable.function(parameter)} ...`
这是我的语法:
varname: VAR ;
variable: varname funParameter? ('.' variable)* ;
templateString: '`' (TemplateStringLiteral* '${' variable '}' TemplateStringLiteral*)+ '`' ;
funParameter: '(' variable? (',' variable)* ')' ;
WS : [ \t\r\n\u000C]+ -> skip ;
TemplateStringLiteral: ('\\`' | ~'`') ;
VAR : [$]?[a-zA-Z0-9_]+|[$] ;
当语法的输入被解析时,模板字符串不再有空格,因为 WS -> 跳过。当我将 TemplateStringLiteral 放在 WS 之前时,出现错误:
外部输入“”需要 {'`'}
我怎样才能允许只在模板字符串中解析空格而不是跳过?
【问题讨论】:
-
Martin,我认为您的问题实际上与空格无关,因为您的解析问题与它无关(请参阅我的回答)。我认为您可以通过更多地关注症状来改进问题(即使规则乍一看似乎很好,也无法识别字符串)。如果这样说,它可以帮助未来有类似问题的访问者。如果您愿意,我可以尝试编辑您的问题。让我知道:)
-
如果它解决了您的问题,您介意接受答案吗?或者如果没有提供更多详细信息?
标签: whitespace antlr antlr4 grammar template-strings