【发布时间】:2011-01-20 17:21:18
【问题描述】:
我正在尝试解析许多文本记录,其中记录中的元素由“+”字符分隔,并且整个记录由“#”字符终止。例如 E1+E2+E3+E4+E5+E6#
单个元素可以是必需的,也可以是可选的。如果一个元素是可选的,那么它的值就会丢失。例如,如果 E2 缺失,则输入字符串将为:E1++E3+E4+E5+E6#。
但是,在处理空的尾随元素时,分隔符 char ('+') 也可能会丢失。例如,如果缺少最后 3 个元素,则字符串可能是:E1+E2+E3#,但也可能是: E1+E2+E3+++#
我在 Antlr 中尝试过以下规则:
'R1''E1 + E2 + E3''+'? “E4”? '+'? “E5”? '+'? “E6”? '#
但是 Antlr 抱怨说它是模棱两可的(E3 后面的每个标记都可能是 E4、E5 或 E6)。输入语法是固定的(它来自旧的大型机系统),所以我想知道是否有人可以解决这个问题?
另一种方法是在规则中指定所有不同的排列,但这将是一项主要任务。
最好的问候和感谢,
迈克尔
【问题讨论】:
-
您能发布所有您的词法分析器规则吗? (假设不是很多)