我必须标记字符串 s。s 可以有一个字母数字、一个右括号和左括号以及一个连字符。如果它有一个未知的字符标记器需要发出一个错误。每个元素都应该被标记化,例如
细绳aa (b - d)
令牌 1 -> aa
(字母数字)
2-> (
(左括号)
3-> b
(字母数字)
4-> -
(连字符)
5-> d
(字母数字)
6-> )
(右括号)
此外,还有一个条件是连字符和字母数字只能有 ( , ) 或空格(换行符、制表符等)。
所以aa(d-b)
应该抛出一个错误。
我的过程是编译多个模式(与上述相关)并将它们与它们的代码一起存储(即字母数字、连字符、封闭括号、开放括号)
然后对于每个字符串,我会遍历模式列表(每个模式都附加有 ^)并尝试匹配。如果我找到匹配项,我会从字符串中删除令牌并重新开始,直到字符串为空。
由于 ( 和 ) 是标记,将在找到后从字符串中删除,我如何检查后续字母数字或连字符之前是否有正确的元素。我知道有一些复杂的方法可以做到这一点(存储上一场比赛等),但我想知道是否有更简单的方法。