我目前正在学习词法分析器和解析器的工作方式,并且我有以下关于状态机的问题。例如,我需要通过以下规则为文本着色:对于此规则,简单的状态转换表将如下所示:
current event next action
IDLE $ COLOR -
COLOR any - OnColor()
COLOR \n IDLE -
这将为 '$' 和行尾之间的每个字符调用 OnColor() 操作,以便我可以对其进行着色。当然同样可以从正则表达式自动生成,但我真的很想知道在大量使用魔法之前它是如何工作的:)。接下来是问题:如果我有一个规则:(想为任何以美元结尾的文本行着色,状态转换表不是很清楚:
current event next action
IDLE any - -
IDLE $ DOUND_DOLLAR -
FOUND_DOLLAR \n IDLE OnDollar()
FOUND_DOLLAR any IDLE -
我可以教我的状态机调用 OnDollar() 如果它在行尾找到一个“$”符号,但是我可以做些什么来为遇到美元符号之前的文本着色?解决此类问题的常见模式是什么?当然,它将是 1 行与正则表达式,但我真的很想知道如何通过状态机实现这样的解析器,是否有可能。