1

我正在尝试使用给定的微语法绘制一个 FSM 来查找令牌

microsyntax
// Uses .Net regular expression syntax.

Identifier <|[a-zA-Z][\w_.]*

IntegerValue <|\d+

// real values must include a decimal point.
RealValue <|\d*\.\d+

// Note that strings do not have any escape characters
// and will be prematurely terminated with a newline.
StringValue <|"[^"\n]*"

我的 FSM 图表如下所示: 在此处输入图像描述

我不确定我制作的图表是否完全正确。我在绘图中的困惑在于:1)标识符az,AZ,_的循环转换。2) 从整数到实值的转换:状态 3 会从 0-9 循环转换吗?和 3) 转换为 stringValue。

如果有人可以让我知道图表是否正确,如果不正确,我的错误是什么,那将非常有帮助?

4

1 回答 1

1

没关系,只是状态 3 不是最终状态且不应循环。(另外,我没有看到您的空格和运算符规则,但该图看起来很合理。)

状态 3 的问题是:

8.

不匹配\d+也不匹配\d*.\d+;前者是因为 the .,而后者是因为它坚持在 the 之后至少有一位数字.。因此,您在阅读后所处的状态 38.不是最终状态。一旦它得到另一个数字,它就会进入状态 4(所以没有循环),这是正确的最终状态。

我会用一个循环而不是两个循环来编写状态 1,但我认为这没有任何区别。此外,状态 6(非最终)下的语义标签应位于状态 7(最终)下。(哦,标记开始状态并没有什么坏处,尽管最后很明显。)

HTH。

于 2012-12-10T00:52:42.887 回答