def _LineCommentDFA(): dfa = DFA() dfa.addStates(["lc0", "lc1", "lcloop", "lcfin"]) dfa.state = dfa.states[0] dfa.setFinal("lcfin") dfa.addTransition("lc0", "lc1", "-") dfa.addTransition("lc1", "lcloop", "-") dfa.addTransition("lcloop", "lcloop", LETTERS + DIGITS + OTHERS + " \t") dfa.addTransition("lcloop", "lcfin", "\n") return dfa
def _LiteralDFA(): dfa = DFA() dfa.addStates(["l0", "lloop", "lescape", "lfin"]) dfa.state = dfa.states[0] dfa.setFinal("lfin") dfa.addTransition("l0", "lloop", "\"") loopchars = (LETTERS + DIGITS + OTHERS + " \n\r\t").replace("\\", "").replace("\"", "") dfa.addTransition("lloop", "lloop", loopchars) dfa.addTransition("lloop", "lescape", "\\") dfa.addTransition("l0", "lescape", "\\") dfa.addTransition("lescape", "lloop", "ntr\"\'\\") dfa.addTransition("lloop", "lfin", "\"") return dfa
def _MultiLineCommentDFA(): dfa = DFA() dfa.addStates(["q0", "q1", "q2", "q3", "qloop", "q4", "q5"]) dfa.state = "q0" dfa.setFinal("q5") dfa.addTransition("q0", "q1", "-") dfa.addTransition("q1", "q2", "-") dfa.addTransition("q2", "q3", "[") dfa.addTransition("q3", "qloop", "[") loopchars = (LETTERS + DIGITS + OTHERS + " \t\n\r").replace("]", "") dfa.addTransition("qloop", "qloop", loopchars) dfa.addTransition("qloop", "q4", "]") dfa.addTransition("q4", "qloop", loopchars) dfa.addTransition("q4", "q5", "]") return dfa