CMurphi入门笔记(二)——基本概念
来源:互联网 发布:安卓优化清理大师 编辑:程序博客网 时间:2024/06/05 15:40
原文地址:http://www.cnblogs.com/Rainday/p/cmurphi_prime_2.html
1. BNF
本系列使用BNF来说明Murphi的语法:
- <> 代表非终结点
- [] 代表可选部分
- {} 代表重复零次或者多次
- a|b 代表a或者b其一
- () 代表组
当这些符号的任何一个在Murphi语言中需要用到的话,将会使用反斜杠(即\)进行转义。
2. 词法规则
下边这些是Murphi中的保留字:
alias array assert begin boolean by case clear const do else elsif end endalias endexists endfor endforall endfunction endif endprocedure endrecord endrule endruleset endstartstate endswitch endwhile enum error exists false for forall function if in interleaved invariant of procedure process program put record return rule ruleset startstate switch then to traceuntil true type var while
在说明Murphi语法的时候,保留字是不受BNF的限制的。
有些保留字并没有定义任何事情,这是为以后的扩展预留的。这些保留字有:
in interleaved process program traceuntil
大小写敏感:Murphi是大小写敏感的,不过保留字除外。"foo"和"Foo"代表不同的标识符,"Begin"和"BeGiN"代表相同的保留字。
同义词:保留字"end"是所有特定类型的end的同义词,也就是说,"end"可以自由取代"endrule","endfor"等保留字。
标识符:标识符是字母、下划线和以字母开头的数字的任意序列。所有以下划线开头的标识符都是系统保留的。标识符在BNF中以<ID>表示。
字符串:字符串在BNF中以<string>表示,是字符的序列,但不用双引号包住。(这一段不是很理解,原文为:A string, referred to in the BNF as <string> is a sequence of
characters other than double quote (\") enclosed in double quotes)
整型常量:整型常量是以10为基的,也就是十进制数字,在BNF中表示为<integer-constant>。
注释:在Murphi中有两种类型的注释:Ada风格的注释,以"--"开始,以换行结束;C风格的注释,以"/*"开始,以"*/"结束,注意这种注释是不能嵌套的。
3. 程序结构
Murphi程序具有如下所示的结构,每个结构的含义已经用注释说明:
<Program> ::= { <decl> } -- Constant, type, and variable declarations { <procdecl> } -- Procedure and function declarations { <rules> } -- rules, startstates, and invariants
一个Murphi程序决定一个状态图。状态是指对每个全局变量的赋值。图中的起始状态由程序中<rules>部分中的startstates定义,之后的状态由程序中<rules>部分中的rules定义。
Murphi的基本概念就是这些了~
传送门:
CMurphi入门笔记(一)——概览
CMurphi入门笔记(二)——基本概念
CMurphi入门笔记(三)——定义
<script type="text/javascript"><!--google_ad_client = "ca-pub-1944176156128447";/* cnblogs 首页横幅 */google_ad_slot = "5419468456";google_ad_width = 728;google_ad_height = 90;//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
- CMurphi入门笔记(二)——基本概念
- CMurphi入门笔记(三)——定义
- CMurphi入门笔记(五)——语句
- CMurphi入门笔记(六)——规则,起始状态和不变式
- CMurphi或Murphi入门——安装配置基于ubuntu下
- JavaScript入门学习笔记(1)—— 基本概念
- 笔记——数据结构入门(二)
- activeMQ笔记(二)——activeMQ的基本概念
- MongoDB技术——基本概念(二)
- Scala基本概念(二)——循环
- Maven初识(二)——基本概念
- ruby基本概念(学习笔记二)
- iPhone开发入门笔记(二)—@property及@synthesize
- 学习笔记—网页基础知识入门(二)
- 【Linux 入门笔记】磁盘基本概念
- uc/os-II 源码剖析笔记(1)——几个OS相关的基本概念(二)
- C51笔记(1)—基本概念
- Linux入门:信号(一)——基本概念
- struts标签的if判断的几个实用方法 两个对象属性比较
- linux pcapy安装问题
- poj 2411 Mondriaan's Dream(状态压缩dp)
- Steps for creating android applications using NDK and ARM assembly language
- 对于0-1分数规划的Dinkelbach算法的分析
- CMurphi入门笔记(二)——基本概念
- cocos2d 中使用 pickerView 简单的老虎机应用
- [LeetCode] Next Permutation、Permutations、Permutations II、Permutation Sequence
- C++ 异常使用总结(持续更新)
- 数学之美--平凡而又神奇的贝叶斯方法(四)
- UVA 729 - The Hamming Distance Problem 解题报告
- SDJZU-FatMouse' Trade
- VC控件通知消息类型
- DWR一直处于加载状态的问题解决