【问题标题】:logical, Finite State Machine逻辑有限状态机
【发布时间】:2023-03-10 04:52:01
【问题描述】:

我正在尝试绘制一个有限状态机(开始、下一个状态等) 我怎样才能只使用 7 个状态来绘制它?

我写出了表格的样子,这将字符输入到标记中 表:例如如果用户输入一个 T 表示 true 应该是输出

输入/输出或标记

1   / T,
2   / F,
#   / ~,
!   / ~,
&   / ^,
*   / ^,
+   / v,
<>  / x,
!=  / x,
=>  / >,
--> / >,
--  / =,
=   / =,
==  / =,
(   / (,
)   / ),

【问题讨论】:

  • 请整理好你的桌子,这样最没有意义。此外,请详细说明您到底想要什么。
  • 至少荷马努力隐藏这是家庭作业的事实。
  • @Dominik,随着家庭作业标签的逐步淘汰,标记家庭作业的规范方式现在已经不复存在。是的,有人可能在问题中提到这一点,但我不会称这种遗漏为“硬隐藏”。
  • @Dominik,我不明白我是如何努力隐藏这是家庭作业的事实,我必须为有限状态机编写代码,在我这样做之前我知道我需要把它画出来然后卡住了,所以我问了。

标签: token lexer state-machine


【解决方案1】:

输入序列的每个前缀都需要一个状态。所以你的状态应该对应于

"", "<", "!", "=", "-", "--"

通常,每一个完成识别输入序列的输入字符都会产生相应的输出,然后返回到初始状态。任何对输入序列有贡献但尚未完成的输入字符将导致与到目前为止读取的前缀匹配的状态转换。任何两者都不是的输入都将被报告为错误。

不过,您的表中确实有一些棘手的情况。有一些输入序列本身就是其他输入序列的前缀。例如,当输入包含“=+”时。在第一个“=”之后你不知道是否会有一个“>”,所以你还不能输出任何东西。在“+”之后,您知道您必须先输出“=”,然后立即输出“+”。因此,您的自动机必须设计为每次转换处理多个输出。

【讨论】:

  • 我想知道,例如,如果你画一条弯曲回到起始状态的弧线,那么假设第一个输出 T 是否为真,我的问题是该弧线算作一个状态吗? (不像
  • 弧线是过渡,而不是状态。因此,对于大多数单字符序列,您将拥有从起始状态到自身的弧线。
猜你喜欢
  • 1970-01-01
  • 2015-06-12
  • 2015-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多