创建确定性有限自动机 (DFA) - Mercury

2023-12-05

我想要在 Mercury 中模拟确定性有限自动机 (DFA)。 但我有几个地方很糟糕。

形式上,DFA 具有以下特征:

  • 一组状态 S,
  • 一个输入字母 E
  • 一个转换函数:S × E --> S,
  • 一个startState s € S,
  • setOfAcceptableFinalStates F =C S。

    DFA 将始终在启动状态下启动。 然后 DFA 将一一读取输入中的所有字符。 根据当前输入的字符和当前状态,将做出 到一个新的状态。 这些转换在转换函数中定义。 当DFA处于他可接受的最终状态之一时,在读取最后一个字符后,DFA会接受输入,如果不接受,则输入将被拒绝。

    该图显示了接受字符串的 DFA,其中零的数量为多个三个。条件1是初始状态,也是唯一可接受的状态。对于每个输入字符,都有相应的弧线跟随到下一个状态。

链接至图

必须做什么

  1. 代表状态的“mystate”类型。每个州都有一个号码,用于 鉴别。

  2. 一种“转换”类型,表示状态之间可能的转换。 每个转换都有一个 source_state、一个 input_character 和一个 Final_state。

  3. 代表整个 DFA 的“状态机”类型。在该解决方案中,DFA必须具有以下属性:

    • 所有状态的集合,
    • 输入字母表,
    • 一个转换函数,表示为一组可能的转换,
    • 一组接受最终状态,
    • DFA 的现状
  4. 谓词“init_machine (state machine :: out)”将他的参数与 DFA,如图所示。 DFA的当前状态被设置为其初始状态,即1。DFA的输入字母表由字符“0”和“1”组成。

  5. 用户可以输入文本,该文本将由 DFA 控制。该计划将 继续,直到用户键入 Ctrl-D 并模拟 EOF。如果用户使用 不允许进入 DFA 输入字母表的字符,则会出现错误消息,程序将关闭。 (预计需要)

Example

Enter a sentence: 0110
String is not ok!
Enter a sentence: 011101
String is not ok!
Enter a sentence: 110100
String is ok!
Enter a sentence: 000110010
String is ok!
Enter a sentence: 011102
Uncaught exception Mercury:
Software Error: Character does not belong to the input alphabet!

我所拥有的东西。

 :- module dfa.
 :- interface.
 :- import_module io.
 :- pred main(io.state::di, io.state::uo) is det.

 :- implementation.
 :- import_module int,string,list,bool.

1

:- type mystate ---> state(int).

2

:- type transition 
            ---> trans(
                    source_state::mystate, 
                    input_character::bool, 
                    final_state::mystate
                   ).

3(错误、finale_state 和 current_state 以及 input_character)

:- type statemachine 
                  ---> dfa(
                        list(mystate),
                        list(input_character),
                        list(transition),
                        list(final_state),
                        current_state(mystate)
                       ).

4错过了很多

:- pred init_machine(statemachine :: out) is det.

%init_machine(statemachine(L_Mystate,0,L_transition,L_final_state,1)) :- <-probably fault

5不完美

main(!IO) :-
        io.write_string("\nEnter a sentence: ", !IO),
        io.read_line_as_string(Input, !IO),
        (
                Invoer = ok(StringVar),
                S1 = string.strip(StringVar),
                (if S1 = "mustbeabool" then

                        io.write_string("Sentenceis Ok! ", !IO)
                else
                        io.write_string("Sentence is not Ok!.", !IO)),
                main(!IO)
        ;
                Invoer = eof
        ;
                Invoer = error(ErrorCode),
                io.format("%s\n", [s(io.error_message(ErrorCode))], !IO)
        ).

希望你能帮我

亲切的问候


当您编写诸如 mystate 之类的类型时:

:- type transition ---> trans(source_state::mystate, input_character::bool, final_state::mystate).

不要把所有内容都写在一行上,这样很难阅读。

:- type transition
    --->    trans(
                source_state     :: mystate,
                input_character  :: bool,
                final_state      :: mystate
            ).

现在阅读起来容易多了。我们还可以看到类型和字段名称的排列方式是错误的。尝试:

:- type transition
    --->    trans(
                mystate  :: source_state,
                bool     :: input_character,
                mystate  :: final_state
            ).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

创建确定性有限自动机 (DFA) - Mercury 的相关文章

  • 如何确定从 Java 文本文件中读取的最大值和最小值

    我正在为班级做作业 正在寻找一些有用的指导 而不是完整的解决方案 基本上 我必须编写一个 Java 程序 读取文本文件并逐行列出信息 列出行号 最后打印出最大值和最小值以及与每个值相关的年份 该文本文件包含年份和该年的温度 因此 它列出了类
  • 在sql server中生成序列

    我正在开发一个函数 该函数将采用一个小数和一个大数作为参数 并返回一个包含其间 并包括 所有内容的表 我知道我可以使用游标并增加一个变量 每次迭代将其添加到基于范围的表中 但如果可能的话 我宁愿避免使用游标 还有其他人有关于执行此操作的方法
  • 如何在js文件中写入php代码

    我的程序是我将页面划分为第一个 div 中的 div 我添加了此代码
  • 宏完成后删除文档

    我有一个 Word 2007 docm 文件 我将其作为电子邮件附件发送给用户 以便他们更新文件 宏从服务器下载文件并正确安装它们 而不是将文件作为电子邮件附件发送并相信用户能够正确安装 我会改用 VBScript 文件 但不允许我通过电子
  • JSF 验证错误,丢失值

    我有一个带有复合键的更新表单 所有复合键都显示在输出框中 因为我为每个复合键都有隐藏字段 验证错误后 这些输出框值为空 我该如何解决这个问题 我在同一页面上 所以它不需要有这些值 这确实是一种非直觉行为h inputHidden 我曾经提交
  • 获取 API 时出错/无法从方法“getHeroes”返回“List”类型的值,因为返回类型为“Future?>”

    我是 Dart Flutter 的新手 正在努力使用 API 这是我的模型文件夹中的文件 List
  • 画布上下文中的 React-chartjs-2 渐变填充错误

    我有一个react chart js2组件 我试图在填充上制作渐变 但是我遇到了一些不同的打字稿错误 并且似乎无法让它工作 该文档表示将 data 属性作为函数传递并引用画布 以便访问画布上下文以添加渐变 不幸的是 这不起作用 这是文件的代
  • SVN Repo 给出 404 not Found

    我已经在 Ubuntu 12 04 上安装了 svn 版本 1 6 17 r1128011 我在这里做了我的回购 sudo mkdir home 2nd disk svn 设置我的 etc apache2 mods enabled dav
  • 寻找一种更Pythonic的方式来访问数据库

    我有很多遵循这种模式的 python 方法 def delete session guid conn get conn cur conn cursor cur execute delete from sessions where guid
  • Facebook 视频上传 OAuthException 200 错误

    我有与此类似的代码 位于 使用 php sdk graph api 将视频上传到 facebook 在我编写的应用程序中 但昨天我开始收到 OAuthException 错误 我寻找了一个简单的视频上传示例到 Facebook 页面进行测试
  • 当我添加新数据时,列表项会发生变化...为什么?

    我有一种方法可以将文件转换为字节 以便稍后可以通过互联网发送它 无论如何 因为我计划发送大文件 所以我发送大块文件而不是发送整个文件 每个块由一个字节数组 byte 组成 我对这一切都很陌生 所以我想在发送之前将每个块保存在块列表 List
  • 如果发生错误,using 语句会回滚数据库事务吗?

    我在 using 语句中有一个 IDbTransaction 但我不确定如果在 using 语句中抛出异常 它是否会回滚 我知道 using 语句将强制调用 Dispose 但是有人知道 Rollback 是否也是如此 Update 另外
  • 如何获取两个日期之间的天数objective-c [重复]

    这个问题在这里已经有答案了 我正在尝试制作一个标签 标明距离活动还剩多少天 我想计算今天的日期和事件日期之间的差异 我正在使用这段代码 它给了我 4600 在我使用今天的日期之前它工作正常 NSDateFormatter f NSDateF
  • 对 Python Dataframe 中的行求和

    我刚刚开始学习 Python 所以如果这个问题已经在其他地方得到了回答 请原谅我 我想创建一个名为 Sum 的新列 它只是将前面的列相加 Risk Parity tail VCIT VCLT PCY RWR IJR XLU EWL Date
  • 如何在 MATLAB 中中止程序执行?

    如何在不退出 MATLAB 的情况下停止 MATLAB 中的程序执行 我正在寻找类似 C 中的 exit 1 的东西 我尝试过退出 退出 但它们也会杀死 MATLAB 这不是我想要的行为 理想情况下 我会使用 try catch 来冒泡错误
  • 我的碰撞检测无法正常工作

    我正在使用 pygame 和 math 模块在 python 中编写游戏 我编写了这些代码来进行碰撞检测 我制作了 5 个障碍物 我希望我的玩家与它们发生碰撞 但问题是在玩游戏的过程中 有时有效 有时无效 这些是我定义的碰撞函数 def c
  • NSDecimalNumber 对长数字进行舍入

    我试图让 NSDecimalNumber 打印出大数字 15 位或更多数字 在 15 位数字中 我看到 111 111 111 111 111 超过 15 位数字时 我看到的是 1 111 111 111 111 110 即使格式化的数字是

随机推荐

  • Angular 2 RC1:从使用的初始 URL 获取参数

    有些用户通过邀请进入我的网络应用程序 所以他们会有一个看起来像这样的链接 https example com invitaion 12345其中 12345 是他们的唯一邀请号码 当用户单击链接时 框架在客户端初始化我的 AppCompon
  • Spring Security oauth2“未找到授权请求”

    我将 Spring Security 5 2 1 配置为与 Google 一起使用 Oauth2 该应用程序在本地运行良好 当部署在 Azure 应用服务上时 每当我尝试 Oauth2 登录流程时 都会出现以下异常 我被转发到 login
  • 包含相同元素的两个数组可以不相等吗?

    今天我遇到了一个令人震惊的问题 我试图查找一个对象是否包含在 List 集合中 问题是 当我已经可以看到该对象时 列表找不到该对象并返回索引为 1 然后我创建了一个自定义索引查找器通过比较属性而不是直接相等来查找对象 我发现对象的属性之一
  • 在 FORTRAN 中创建名称包含实数的目录

    在我的程序中 我需要存储不同情况的结果文件 我决定创建单独的目录来存储这些结果文件 这里用伪代码来解释具体的情况 do i 1 N N cases of my analysis U SPEED i call write files U Cr
  • Siri 支持无效 - 警告 iTunes Connect

    我将 SiriKit 集成到我的应用程序中以骑书 但将我的应用程序发送到 TestFlight 后 我 收到一封邮件回复 其中包含下一个警告 Siri 支持无效 未提供示例短语 en CO 语言中的 INGGetRideStatusInte
  • Ivy 似乎只获取 javadoc jar

    我在我的项目中使用 Ivy 以及 Ivy Eclipse 插件 看起来下载并添加到我的项目中的某些 jar 是 javadoc jar 而不是带有实际代码的 jar 注意 并非所有罐子都会发生这种情况 例如 将其添加到我的 ivy xml
  • 如何使用jquery删除所有cookie[重复]

    这个问题在这里已经有答案了 可能的重复 使用javascript清除所有cookie 我希望分配一个复选框来一次性激活和清除以前存储在我的表单中的所有 cookie 我该如何使用 jquery cookie 插件来做到这一点 我似乎无法在克
  • 常量构造函数

    在C 中是否可以实现类似于构造函数之类的只允许创建的东西const物体 我正在考虑为接口创建一个装饰器类const和非const方法 从 a 初始化装饰器const基对象应该只能生成 const 装饰器 但从非 const 初始化应该会产生
  • 为什么这段代码会崩溃?

    以下代码会导致堆栈溢出 但我不明白为什么 int tmain int argc TCHAR argv cout lt lt start char bmp 1024 768 3 for int p 0 p lt 9000 p for int
  • 读取网页内容

    你好 我想使用java读取包含德语字符的网页内容 不幸的是 德语字符显示为奇怪的字符 请提供任何帮助 这是我的代码 String link some german link URL url new URL link BufferedRead
  • 如何设置Spark Kmeans初始中心

    我正在使用 Spark ML 来运行 Kmeans 我有一堆数据和三个现有中心 例如这三个中心是 1 0 1 0 1 0 5 0 5 0 5 0 9 0 9 0 9 0 那么我如何表明 Kmeans 中心是上述三个向量 我看到 Kmean
  • Ionic-Framework (4) - Openlayers 地图不工作/不可见

    我尝试将 Openlayers 与 Ionic 一起使用 但地图在 setTimeout 之前不可见 这是我的工作代码 import Component OnInit from angular core import OlMap from
  • 找不到类型或命名空间

    我目前正在尝试将 Visual Studio 2008 中的 WiX 3 5 自定义操作项目转换为 WiX 3 7 和 Visual Studio 2012 但出现以下异常 找不到类型或名称空间名称 MyNamespace 您是 缺少 us
  • 页面加载时,如何让六个函数互相执行?

    当页面加载时 在一个大div中 有六个不同的元素 这些元素有六个不同的函数 我想让这些函数在一定时间后互相执行 例如1000ms 但这六个函数不是绑定到一个元素 它们绑定到六个不同的元素 例如 当页面加载时 我想将Class line1 添
  • 如何使 在 div 内垂直居中? [复制]

    这个问题在这里已经有答案了 代码 div style border solid 1px gray width 400px padding 0px span style background e2e6f0 padding right 4px
  • Apache Commons 文件上传 - 流意外结束

    好吧 我不得不说 到目前为止 这个问题让我难住了 我们在 Tomcat 6 0 18 中运行的 Web 应用程序在文件上传期间失败 但是仅当客户端机器是Windows机器时 仅适用于某些机器 并且适用于所有浏览器 而不仅仅是IE 日志中有堆
  • 将函数应用于列表的每个元素[重复]

    这个问题在这里已经有答案了 假设我有一个类似的列表 mylis this is test another test 如何将函数应用于列表中的每个元素 例如 我该如何申请str upper to get THIS IS TEST ANOTHE
  • 如何在 C# 中执行 SHA1 文件校验和?

    我该如何使用SHA1CryptoServiceProvider 在文件上创建文件的 SHA1 校验和 using FileStream fs new FileStream C file location FileMode Open usin
  • python exec() 中的全局变量和局部变量

    我正在尝试使用 exec 运行一段 python 代码 my code class A object pass print locals s locals print A s A class B object a ref A global
  • 创建确定性有限自动机 (DFA) - Mercury

    我想要在 Mercury 中模拟确定性有限自动机 DFA 但我有几个地方很糟糕 形式上 DFA 具有以下特征 一组状态 S 一个输入字母 E 一个转换函数 S E gt S 一个startState s S setOfAcceptableF