0

我必须标记字符串 s。s 可以有一个字母数字、一个右括号和左括号以及一个连字符。如果它有一个未知的字符标记器需要发出一个错误。每个元素都应该被标记化,例如

细绳aa (b - d)

令牌 1 -> aa(字母数字)

2-> ((左括号)

3-> b (字母数字)

4-> - (连字符)

5-> d (字母数字)

6-> ) (右括号)

此外,还有一个条件是连字符和字母数字只能有 ( , ) 或空格(换行符、制表符等)。

所以aa(d-b)应该抛出一个错误。

我的过程是编译多个模式(与上述相关)并将它们与它们的代码一起存储(即字母数字、连字符、封闭括号、开放括号)

然后对于每个字符串,我会遍历模式列表(每个模式都附加有 ^)并尝试匹配。如果我找到匹配项,我会从字符串中删除令牌并重新开始,直到字符串为空。

由于 ( 和 ) 是标记,将在找到后从字符串中删除,我如何检查后续字母数字或连字符之前是否有正确的元素。我知道有一些复杂的方法可以做到这一点(存储上一场比赛等),但我想知道是否有更简单的方法。

4

1 回答 1

0

你不会喜欢这个,但最简单的方法是使用 JFlex 或 ANTLR 之类的词法分析器。您将需要设置一个 jflex 文件,但在您完成之后,对字符串进行标记非常容易。

于 2013-10-23T11:23:18.687 回答