正如我在这个问题中所说,我正在使用 DFA 来跟踪所有评论、字符串等。我完成了这个具有 11 个状态的 DFA。
现在我要编写 DFA 来识别 java 中的关键字。
主意:
最初,pos=0。pos 每次转换都加 1。
iskeyword() 是我自己的函数。
isalnum() 可以被任何用户定义的函数替换,这取决于未来的需求。
(许多不相关的转换和自循环虽然存在于实际的 DFA 中,但并未提供)。
(q0) -- !isalnum(pos)-------> (q1) ---iskeyword(pos,pos+len)---> (pos+=len)(q2)----- ! isalnum(pos)-------->(q3[使读取的关键字加粗])---iskeyword(pos,pos+len)-->(q2)。
它至少需要 4 个状态。上述方法与 DFA 的正常实现有很大不同。
我的问题是……
- 我可以按照上述方法吗?这样做是对的吗?(如果有效)
- 如果我必须以上述方式实现这一点,我该怎么做?构建单独的 DFA 以提高可读性?或者我可以将此 DFA 与识别评论、字符串的 DFA 结合起来(以减少状态数)