在ANTLR中将一个数字解析为多个标记

时间:2017-07-19 21:31:40

标签: parsing antlr antlr4

我正在尝试使用ANTLR作为我公司最新项目的解析器。我无法找到有关如何解析一个数字的任何信息,比如说(0005039906179210835699175654)为多个令牌(5位数字,3位数字,14位数字和6位数字)。

我当前的代码吐出错误,

line 1:1 no viable alternative at input '0005039906179210835699175654'

此外,另一方面,有没有人知道如何使用监听器获取令牌的名称?这只是一个我想的奖金问题:)提前感谢所有回复的人!

修改 为了澄清整个问题,我公司从自动化系统接收传统格式的信息。必须将此信息解析为POJO以进行进一步处理。我正在尝试使用ANTLR作为一种简单,流畅,可读和可扩展的解决方案。一个例子是这一行:

U0005138606179090232769522950 0863832 18322862 0284785                    3

必须解析哪些部分:U,00051,386,06179090232769,522950,0863832,18322862,0284785和3.显然,用空格分隔的部分很容易解析,但我一直无法找到方法在ANTLR中解析未被空格分隔的值。任何帮助将不胜感激,谢谢!

EDIT2: 为了清楚地说明为什么我使用ANTLR而不仅仅是java,我的公司接收5种传统格式的消息,并且实现解析它们的系统必须易于扩展以适应未来。 ANTLR易于阅读和理解。另外,构建其他语法和监听器比尝试维护随机乱码的java更容易。

EDIT3: 我想到了一个解决方案,但它很漂亮。我的想法是将28个字符数解析为一个标记,然后使用java从监听器中拆分它,因为它每次都以相同的方式分解。我今天晚些时候会报告我是否让它发挥作用。

EDIT4,最终更新: 我选择了我在edit3中提到的解决方案。它不漂亮,但它的工作原理足够快。非常感谢所有评论,分享想法和激发思想的人!

0 个答案:

没有答案