ANTLR字符串插值

编程入门 行业动态 更新时间:2024-10-22 20:38:43
本文介绍了ANTLR字符串插值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我正在尝试编写ANTLR语法来解析字符串插值表达式,例如:

I'm trying to write an ANTLR grammar that parses string interpolation expressions such as:

my.greeting = "hello ${your.name}"

我得到的错误是:

line 1:31 token recognition error at: 'e' line 1:34 no viable alternative at input '<EOF>'

MyParser.g4:

MyParser.g4:

parser grammar MyParser; options { tokenVocab=MyLexer; } program: variable EQ expression EOF; expression: (string | variable); variable: (VAR DOT)? VAR; string: (STRING_SEGMENT_END expression)* STRING_END;

MyLexer.g4:

MyLexer.g4:

lexer grammar MyLexer; START_STR: '"' -> more, pushMode(STRING_MODE) ; VAR: (UPPERCASE|LOWERCASE) ANY_CHAR*; EQ: '='; DOT: '.'; WHITE_SPACE: (SPACE | NEW_LINE | TAB)+ -> skip; fragment DIGIT: '0'..'9'; fragment LOWERCASE: 'a'..'z'; fragment UPPERCASE: 'A'..'Z'; fragment ANY_CHAR: LOWERCASE | UPPERCASE | DIGIT; fragment NEW_LINE: '\n' | '\r' | '\r\n'; fragment SPACE: ' '; fragment TAB: '\t'; mode INTERPOLATION_MODE; STRING_SEGMENT_START: '}' -> more, popMode; mode STRING_MODE; STRING_END: '"' -> popMode; STRING_SEGMENT_END: '${' -> pushMode(INTERPOLATION_MODE); TEXT : ~["$]+ -> more ;

类似以下的表达式可以正常工作:

Expressions like the following work fine:

my.greeting = "hello" my.greeting = "hello ${} world"

有什么想法我可能做错了吗?

Any ideas what I might be doing wrong?

推荐答案

而不是:

mode INTERPOLATION_MODE; STRING_SEGMENT_START: '}' -> more, popMode; I_VAR: (UPPERCASE|LOWERCASE) ANY_CHAR*; I_DOT: '.'; ... variable: ((VAR|I_VAR) (DOT|I_DOT))? (VAR|I_VAR);

您可以尝试:

mode INTERPOLATION_MODE; STRING_SEGMENT_START: '}' -> more, popMode; I_VAR: (UPPERCASE|LOWERCASE) ANY_CHAR* -> type(VAR); I_DOT: '.' -> type(DOT); ... variable: (VAR DOT)? VAR;

更多推荐

ANTLR字符串插值

本文发布于:2023-11-08 14:05:06,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1569582.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:字符串   插值   ANTLR

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!