ANTLR 适合这个项目吗?我希望处理和转换用户输入的字符串,其中可能包含自定义函数。例如,用户可能会在字符串中写入类似 $CAPITALIZE('word') 的内容,而我想使用 StringUtils 在后台执行实际转换。我想用户有时会编写嵌套函数,例如:$RIGHT_PAD($RIGHT($CAPITALIZE('a123456789'),6),3,'0')预期输出将是“A12345000”的字符串值。我尝试使用正则表达式将函数分开,但是一旦嵌套,就不是那么容易了。我想我可以尝试编写自己的解析器,在进行研究时,我发现了一篇建议使用 ANTLR 的文章。这是 ANTLR 适合的东西吗?如果是这样,是否有任何类似的示例可供我查看?或者有人愿意给我一个例子,说明我如何在 ANTLR 中写出它,以便我可以同时拥有可以单独处理和嵌套方式处理的自定义函数。功能:$大写(字符串str)$INDEX_OF(字符串序列,字符串搜索序列)$LEFT(String str, int len)$LEFT_PAD(String str, int size,char padChar)$LOWERCASE(String str)$RIGHT(String str, int len)$RIGHT_PAD(String str, int size, char padChar)$STRIP(字符串str)$STRIP_ACCENTS(字符串输入)$SUBSTRING(String str, int start)$SUBSTRING(String str, int start, int end)$TRIM(字符串str)$TRUNCATE(String str, int maxWidth)$大写(字符串str)基本示例:$CAPITALIZE('word') → 'Word'$INDEX_OF('word', 'r') → 2$LEFT('0123456789',6) → '012345'$LEFT_PAD('0123456789',3, '0') → '0000123456789'$LOWERCASE('WoRd') → 'word'$RIGHT('0123456789',6) → '456789'$RIGHT_PAD('0123456789',3, '0') → '0123456789000'$STRIP('单词')→'单词'$STRIP_ACCENTS('wórd') → 'word'$SUBSTRING('word', 1) → 'ord'$SUBSTRING('word', 0, 2) → 'wor'$TRIM('词') → '词'$TRUNCATE('更多单词', 3) → '更多'$UPPERCASE('word') → 'WORD'嵌套示例$LEFT_PAD($LEFT('123456789',6),3,'0') → '000123456'$RIGHT_PAD($RIGHT($CAPITALIZE('a123456789'),6),3,'0') → 'A12345000'实际示例: 我所说的实际示例的意思是,这就是我期望的字符串值可能的样子。你会注意到有像 ${var} 这样写的变量。在将字符串传递到 ANTLR 之前,这些变量将使用 Apache Commons StringSubstitutor 替换为实际的字符串值(如果我应该使用它)用户写入的初始字符串 \HomeDir\Students\$RIGHT(${graduation.year},2)\$LEFT_PAD($LEFT(${state.id},6),3,'0')StringSubstitutor 处理后的字符串 \HomeDir\Students\$RIGHT('2020',2)\$LEFT_PAD($LEFT('123456789',6),3,'0')由 ANTLR 处理后的字符串 (以及我的最终输出)\HomeDir\Students\20\000123456ANTLR 看起来像我应该在这个项目中使用的东西,还是其他东西更适合?
添加回答
举报
0/150
提交
取消