stanford-oval/wikipedia huggingface dataset:
凯西 (怀俄明州)

| Kaycee |
| --- | --- |

坐标：43°42′35″N 106°38′19″W﻿ / ﻿43.7097°N 106.6386°W﻿ / 43.7097; -106.6386
國家:  美国
州: 怀俄明州
县: 约翰逊县
人口（2011）
 • 總計: 266人
凯西（英語：），是美国怀俄明州约翰逊县（Johnson）下属的一座城市。该市的人口在2000年为249人，2010年有263，2011年则估计有266人。
参考资料

↑  . U.S. Census Bureau.   [November 18, 2011]. （原始内容存档于2006-02-08）.
克蕾西达·考威尔

| Cressida Cowell |
| --- | --- |

出生:  (1966-04-15) 1966年4月15日（58歲） 伦敦
居住地: 伦敦
国籍: 英国
母校: 牛津大学
职业: 作家
知名作品: How to Train Your Dragon
网站: http://www.cressidacowell.co.uk/
克蕾西达·考威尔，MBE（英語：，1966年4月15日—） 是一名英国儿童文学女作家，主要作品为《如何馴服你的龍》系列，该系列已改编成梦工厂动画电影《驯龙高手》。
此外，她与插画家Neal Layton合作 Emily Brown系列，该系列的第一本That Rabbit Belongs to Emily Brown赢得雀巢聰明豆兒童圖書獎（Nestlé Smarties Book Prize）。
生平

克蕾西达1966年生于伦敦，她是Michael Hare子爵之女。
曾在牛津大學基布爾學院学习英语，并在 Saint Martin's School of Art 和布莱顿大学学习插画。
她目前与丈夫Simon居住于伦敦，Simon是公益组织International Save the Children Alliance的前主管，两人育有两个女儿Maisie 和 Clementine，以及一个儿子Alexander。
著作 > How to Train Your Dragon 系列

How to Train Your Dragon (2003)
How to Be a Pirate (2004)
How to Speak Dragonese (2005)
How to Cheat a Dragon's Curse (2006)
How to Twist a Dragon's Tale (2007)
A Hero's Guide to Deadly Dragons (2008)
How to Ride a Dragon's Storm (2008)
How to Break a Dragon's Heart (2009)
How to Steal a Dragon's Sword (2011)
The Day of the Dreader (2012)
How to Seize a Dragon's Jewel (2012)
How to Betray a Dragon's Hero (2013)
著作 > Emily Brown 系列

That Rabbit Belongs to Emily Brown
Emily Brown and the Thing
Emily Brown and the Elephant Emergency
Cheer Up Your Teddy Bear, Emily Brown!
著作 > 其他书籍

Little Bo Peep’s Troublesome Sheep
Don’t Do That Kitty Kilroy
What Shall We Do with the Boo-Hoo Baby
There's No Such Thing as a Ghostie!
Daddy on the moon
Hiccup the Seasick Viking
How to Train Your Viking, by Toothless the Dragon (2006)
奖项

2006年雀巢聰明豆兒童圖書獎0–5岁系列: That Rabbit Belongs to Emily Brown by Cressida Cowell & Neal Layton (Orchard Books)
参考资料

↑  . Cressidda Cowell - Official Website.   [4 April 2012]. （原始内容存档于2014-10-10）.
↑  How to Train Your Dragon (film)#Accolades
↑  .   [2014-04-11]. （原始内容存档于2020-11-01）.
↑  DavidHigham.Co.UK （页面存档备份，存于）(dead link)
↑  .   [2014-04-11]. （原始内容存档于2010-04-02）.
↑  Chilton, Martin. . Telegraph. 8 October 2012  [31 January 2013]. （原始内容存档于2019-10-09）.
↑  .   [2014-04-11]. （原始内容存档于2013-02-11）.
兰花花

《兰花花》，陕西信天游民歌，最早在陕北固临县一带流传。歌词里写道“一十三省的女儿哟，唯有那个兰花花好”，中国明朝行政区划建制是两京十三省。因此这首民歌可能诞生在明朝或者清朝。1930年代被八路军延安鲁艺文艺工作者整理改编，后在中共解放区流行。1949年之后，流行于全中国。唱过此歌的歌唱家有郭兰英、王昆。当代歌手有彭丽媛、李瑾、阿宝、谭维维等。该民歌还被改编成钢琴曲、歌舞剧、芭蕾舞剧、动画影片、电视连续剧。香港有《兰花花》同名电影，但是故事与民歌兰花花不同。
刘新生

刘新生（1937年—），中华人民共和国政治人物、外交官。
生平

毕业于北京外国语学院英文系和北京大学东语系印尼文专业。1961年，进入中华人民共和国外交部工作。1962年，奉派前往印尼大学进修。1964年，毕业留在驻印度尼西亚大使馆工作。1967年，两国断交，回国工作。1973年起，先后在外交部领事司、外交部信使队、外交部亚洲司、驻印度大使馆、驻菲律宾大使馆任职。1990年，任驻印度尼西亚大使馆参赞。1993年，出任中华人民共和国驻文莱大使。1998年，自驻文莱大使离任退休。
参考资料

↑  . 一带一路数据库.   [2019-08-24]. （原始内容存档于2019-08-24）.
↑  . 中华人民共和国外交部.   [2022-09-17]. （原始内容存档于2022-09-22）.
↑  . 中华人民共和国外交部驻香港特别行政区特派员公署. 2004-09-27  [2022-09-17]. （原始内容存档于2022-07-27）.
| 0 | 1 | 2 |
| --- | --- | --- |

外交職務
| 前任： 金桂华 | 中华人民共和国驻文莱大使 1993年12月－1998年3月 | 繼任： 王建立  |
圆孔壳科

| 圆孔壳科 |
| --- | --- |


科学分类 
界：: 真菌界 Fungi
门：: 子囊菌门 Ascomycota
纲：: 糞殼菌綱 Sordariomycetes
目：: 圆孔壳目 Amphisphaeriales
科：: 圆孔壳科 Amphisphaeriaceae

模式種
圆孔壳菌属 Amphisphaeria Cesati & de Notaris, 1863
属
 见正文
圆孔壳科（学名：）也称圆孔壳菌科，为圆孔壳目的一个科。此科的模式属为圆孔壳菌属(Amphisphaeria)。
公孙兹

公孙兹（？—前644年），姬姓，叔孙氏，名兹，一作慈，谥戴，又被称为叔孙戴伯，是鲁桓公的孙子，叔牙的长子，武仲休的哥哥。鲁僖公时，公孙兹为卿。
立家

前662年，鲁庄公得了重病，向叔牙询问继承人的事。叔牙回答说：“庆父有才能。”鲁庄公又向季友询问，季友回答说：“臣会以死来事奉子般。”鲁庄公说：“刚才叔牙想立庆父，怎么办？”季友就派人用国君的名义让叔牙等待在鍼巫氏家里，让鍼季用毒酒毒死叔牙，说：“喝了这个，你的后代在鲁国还可以享有禄位；如果不喝，你死了后代也没有禄位。”叔牙喝了毒酒后回去，到达逵泉就死去了。鲁国立叔牙的长子公孙兹为叔孙氏。
伐陈

前656年，因为陈国对齐国不忠，公孙兹带兵会合诸侯的军队进攻陈国，陈国求和。
娶于牟

前655年夏，公孙兹前往牟国，在那里娶妻。
去世

前644年七月甲子，公孙兹去世，他的儿子叔孙得臣继立。
参考资料

↑  《公羊传·僖公四年》：冬，十有二月，公孙慈帅师会齐人、宋人、卫人、郑人、许人、曹人侵陈。
↑  《公羊传·僖公五年》：夏，公孙慈如牟。
↑  《春秋经传集解·僖公四年》：戴，谥也。
↑  《春秋经传集解·僖公四年》：公孙兹，叔牙子叔孙戴伯。
↑  《春秋·僖公四年》：冬十有二月，公孙兹帅师会齐人、宋人、卫人、郑人、许人、曹人侵陈。
↑  《春秋·僖公五年》：夏，公孙兹如牟。
1 2  《春秋·僖公十六年》：秋七月甲子，公孙兹卒。
↑  《左传·庄公三十二年》：公疾，问后於叔牙，对曰：“庆父材。”问於季友，对曰：“臣以死奉般。”公曰：“乡者牙曰‘庆父材’。成季使以君命命僖叔待于鍼巫氏，使鍼季鸩之，曰：“饮此则有后于鲁国，不然，死且无后。”饮之，归及逵泉而卒，立叔孙氏。
↑  《史记·卷三十三·鲁周公世家第三》：庄公病，而问嗣於弟叔牙。叔牙曰：“一继一及，鲁之常也。庆父在，可为嗣，君何忧？”庄公患叔牙欲立庆父，退而问季友。季友曰：“请以死立斑也。”庄公曰：“曩者叔牙欲立庆父，柰何？”季友以庄公命命牙待於鍼巫氏，使鍼季劫饮叔牙以鸩，曰：“饮此则有後奉祀；不然，死且无後。”牙遂饮鸩而死，鲁立其子为叔孙氏。
↑  《左传·僖公四年》：冬，叔孙戴伯帅师，会诸侯之师侵陈。陈成，归辕涛涂。
↑  《左传·僖公五年》：公孙兹如牟，娶焉。
| 0 | 1 | 2 |
| --- | --- | --- |

| 前任： - | 魯國叔孙氏宗主 | 繼任： 子叔孙庄叔叔孫得臣 |
儀衛司

儀衛司是元明兩代護衛皇室的機構。元代儀衞司，設指揮二員，從四品；副二員，從五品；知事一員，從八品。元至正十三年六月丙申朔丙辰，詔皇太子位下立儀衞司， 設指揮二員，給二珠金牌，副指揮二員，一珠金牌。明洪武三年置儀衞司，掌侍衞儀仗。
明代共設儀衞司三十三：
山東都司：魯府儀衞司　德府儀衞司　涇府儀衞司　衡府儀衞司。
陝西都司：秦府儀衞司　慶府儀衞司　肅府儀衞司　韓府儀衞司。
四川都司：蜀府儀衞司　壽府儀衞司。
廣西都司：靖江府儀衞司。
河南都司：周府儀衞司　唐府儀衞司　伊府儀衞司　趙府儀衞司　鄭府儀衞司　崇府儀衞司　徽府儀衞司。
湖廣都司：楚府儀衞司　荊府儀衞司　雍府儀衞司　榮府儀衞司　岷府儀衞司　吉府儀衞司。
湖廣行都司：遼府儀衞司　襄府儀衞司　興府儀衞司。
江西都司：寧府儀衞司　淮府儀衞司　益府儀衞司。
山西都司：晉府儀衞司　瀋府儀衞司　代府儀衞司
註釋

↑  《元史》卷九十二　志第四十一下／百官八
↑  《元史》卷四十三　本紀第四十三／順帝　妥懽貼睦爾
↑  「王府護衞指揮使司，設官如京衞。王府儀衞司。儀衞正一人，正五品，儀衞副二人，從五品，典仗六人，正六品。儀衞，掌侍衞儀仗。護衞，掌防禦非常，護衞王邸。有征調，則聽命於朝。明初，諸王府置護軍府。洪武三年置儀衞司，司設正、副各一人，秩比正、副千戶；司仗六人，秩比百戶。四年改司仗為典仗。五年置親王護衞指揮使司，每王府設三護衞，衞設 左、右、前、後、中五所，所千戶二人，百戶十人。又設圍子手二所，每所千戶一人。九年罷 護軍府。建文中，改儀衞司為儀仗司，增置吏目一人。成祖初復舊制。」。《明史》卷七十六　志第五十二／職官五／王府護衞　附儀衞司
Modula-3

| --- | --- |

: 指令式, 过程式, 结构化, 模块化, 并发
语言家族: Wirth Modula
設計者: Luca Cardelli（英语：）, James Donahue, Lucille Glassman, Mick Jordan, Bill Kalsow, Greg Nelson（英语：）
實作者: DEC, Olivetti, elego Software Solutions GmbH
: 1988年，​36年前​（1988）
型態系統: 强类型, 静态, 安全或在不安全时显式安全隔离
作用域: 词法
系统平台: IA-32, x86-64, PowerPC, SPARC
操作系统: 跨平台: FreeBSD, Linux, Darwin, SunOS
網站: www.modula3.org
主要實作產品
SRC（英语：） Modula-3, CM3, PM3, EZM3, M3/PC Klagenfurt
啟發語言
ALGOL, Euclid（英语：）, Mesa, Modula-2, Modula-2+（英语：）, Oberon, Object Pascal
影響語言
C#, Java, Nim, Python, Baby Modula-3（英语：）
Modula-3是一种系统编程语言，它是叫做Modula-2+（英语：）的升级版本的Modula-2的后继者。虽然它已经在研究界有了影响力，受其影响的语言有Java、C#和Python，但未能在工业上被广泛采用。它是在1980年代末由在数字设备公司（DEC）系统研究中心（英语：）（SRC）和Olivetti研究中心（ORC）的Luca Cardelli（英语：）、James Donahue、Lucille Glassman、Mick Jordan（之前在Olivetti软件技术实验室工作）、Bill Kalsow和Greg Nelson（英语：）设计。
Modula-3的主要特点，是保持系统编程语言的强力，同时具有简单性和安全性。Modula-3意图延续Pascal的类型安全和Modula-2的模块化编程传统，同时为实际编程引入新构造。特别是Modula-3添加了如下支持：例外处理、关键字参数与缺省参数值、有跟踪的引用与垃圾回收、面向对象、不透明类型及其披露、泛型、多线程和不安全代码显式标记。Modula-3的设计目标，是以非常基本的形式，实现指令式编程语言的大部份重要的现代特征。因此省略了涉嫌危险和复杂的特征，如多重继承和运算符重载。
发展历史

Modula-3项目始于1986年11月，当时莫里斯·威尔克斯向尼克劳斯·维尔特写信，提出了一些关于Modula新版本的想法。威尔克斯在此之前一直在DEC工作，他回到英格兰并加入了Olivetti的研究策略委员会。Wirth已经转移到了Oberon，但Wilkes的团队在Modula名下继续开发没有任何问题。语言定义于1988年8月完成，并于1989年11月更新了版本。DEC和Olivetti的编译器很快就出现了，随后又有了第三方实现。
它的设计受到SRC（英语：）和Acorn计算机研究中心（ARC，在Olivetti收购Acorn之后叫做ORC）在Modula-2+（英语：）语言上的工作的很大影响，Modula-2+（英语：）是编写DEC Firefly（英语：）多处理器VAX工作站的操作系统的语言，还是在基于ARM的Acorn Archimedes（英语：）系列计算机的ARX操作系统（英语：）项目中，ARC编写用于Acorn C和模块执行库（CAMEL）的Acorn编译器的语言。正如修订的Modula-3报告所述，该语言演化自Mesa、Modula-2、Cedar和Modula-2+（英语：），还受到其他语言的影响如：Object Pascal，Oberon和Euclid（英语：）。
在20世纪90年代，Modula-3作为一种教学语言获得了可观的传播，华盛顿大学在1994年发行的微内核操作系统SPIN（英语：）是用Modula-3开发的，但它从未广泛用于工业用途。造成这种情况的原因，可能是Modula-3的关键支持者DEC的消亡，特别是在1998年DEC被出售给康柏之前就不再有效地维护它了。无论如何，尽管Modula-3有着简单性和强大功能，似乎当时对有限实现了面向对象编程的过程式编译语言的需求很少。
Critical Mass公司曾在一段时间内提供了一个名为CM3的商业编译器，它由以前DEC SRC的在DEC被出售给Compaq之前雇用的一个主要实现者维护，和叫做Reactor的一个集成开发环境以及可扩展的Java虚拟机（以二进制和源格式许可发行并可用Reactor来构建）。但该公司在2000年停止了活动，并将其产品的一些源代码提供给了elego软件解决方案有限公司。
基本上，Modula-3的唯一企业支持者是elego软件解决方案有限公司，它继承了Critical Mass的资源，并且已经以源代码和二进制形式发布了几个版本的CM3系统。Reactor IDE在几年后才开源发布，新的名称是CM3-IDE。2002年3月，elego还接管了此前由蒙特利尔工程学院维护的另一个活跃的Modula-3发行版PM3的存储库，在此后几年间以HM3名义进行了持续改进，直至最终被淘汰。
Modula-3是文档记录了语言特征演化的少见语言之一，在《用Modula-3系统编程》中，收录了设计者对四个设计要点的讨论：结构等价与名称等价、子类型规则、泛型模块和参数模态。Modula-3现在主要是在大学中的比较编程语言课程中教授，其教科书已绝版。
程序示例

Modula-3中所有的程序至少具有一个模块文件，而大多数程序还包括一个接口文件，客户端使用它来访问来自模块的数据。语言语法的一个常见示例是Hello world程序：
MODULE Main; 
    IMPORT IO;
BEGIN
    IO.Put("Hello World\n")
END Main.
与其他语言一样，Modula-3程序必须有导出Main接口的实现模块，如上述示例中实现模块缺省导出了同名的接口，它可以处在名为Main.m3的文件中；或者是通过EXPORTS导出Main接口的实现模块，比如：
MODULE HelloWorld EXPORTS Main; 
    IMPORT IO;
BEGIN
    IO.Put("Hello World\n")
END HelloWorld.
建议这个模块所在的文件的名字与实际模块名字相同，当它们不同时编译器只是发出一个警告。
语言设计理念

Modula-3委员会将Modula-3设计为ALGOL语言家族的现代代表，他们认为：
始自BCPL的C语言家族，其优美在于以适度的代价得到了相对汇编语言的巨大飞跃，但它们接近于目标机器的低层编程模型（英语：）是天然有危险性的；其中的衍生语言C++，通过增加对象丰富了C，但它放弃了C的最佳优点简单性，却没有消除它最差缺点即低层编程模型。
另一个极端是LISP语言家族，它们有着混合了lambda演算和配对函数理论的编程模型（英语：），但它们趋于难以高效实现，因为在编程模型中值的统一对待，招致了所有的值都由指针统一表示的运行时间系统；这个家族的语言的良好实现避免了多数代价而能用于系统编程，但它们普遍秉性仍旧向往堆分配而非栈分配，这种运行时间系统经常将它们孤立于封闭环境中，而不能容纳用其他语言写的程序。
ALGOL语言家族处在这两个极端之间，它的现代代表包括Pascal、Ada、Modula-2等，这些语言拥有的编程模型反映了随机存取机在工程上的约束，隐藏了任何特定于机器的细节。它们放弃了LISP家族的优美和数学对称性，使得无须特殊技巧就可能高效的实现，并且避免了C家族的多数危险和依赖机器的特征。
ALGOL家族语言都有强类型系统，其基本想法是把值空间划分成类型，限制变量持有单一类型的值，并且限制运算应用于固定类型的运算数。这个语言家族的趋势，在1960年代是朝向控制流程和数据结构特征，在1970年代是朝向信息隐藏（英语：）特征如接口、不透明类型和泛型，在1980年代是采纳来自LISP家族和始自BCPL的C家族的仔细挑选的技术。
Modula-3委员会坚持一个自称为“复杂度预算”的设计原则：在五十页内将语言准确而易读的描述出来，为此只容纳最有用的特征。精选出来的特征直接针对两个主要目标：
接口、对象、泛型和线程，提供有助于建造大型程序的基础抽象模式；
不安全代码的显式标记、自动垃圾收集和例外，有助于让程序更加安全和健壮。
这些特征中任何一个都没有特殊的新颖性，但是组合起来是简单而强力的。人们越是更好的理解程序，就越是使用更大的建造块去构造它。指令之后是语句，语句之后是过程，过程之后是接口，下一步应当是抽象类型。在理论层面，抽象类型，是通过其操作的规定，而非通过其数据的表示，来定义的类型。
词法记号

关键字：
| 0 | 1 | 2 | 3 | 4 | 5 |
| --- | --- | --- | --- | --- | --- |
|  AND  ANY  ARRAY  AS  BEGIN  BITS  BRANDED  BY  CASE  CONST  DIV |  DO  ELSE  ELSIF  END  EVAL  EXCEPT  EXCEPTION  EXIT  EXPORTS  FINALLY  FOR |  FROM  GENERIC  IF  IMPORT  IN  INTERFACE  LOCK  LOOP  METHODS  MOD  MODULE |  NOT  OBJECT  OF  OR  OVERRIDES  PROCEDURE  RAISE  RAISES  READONLY  RECORD  REF |  REPEAT  RETURN  REVEAL  ROOT  SET  THEN  TO  TRY  TYPE  TYPECASE  UNSAFE |  UNTIL  UNTRACED  VALUE  VAR  WHILE  WITH |
保留标识符：
| 0 | 1 | 2 | 3 | 4 | 5 | 6 |
| --- | --- | --- | --- | --- | --- | --- |
|  ABS  ADDRESS  ADR  ADRSIZE  BITSIZE  BOOLEAN |  BYTESIZE  CARDINAL  CEILING  CHAR  DEC  DISPOSE |  EXTENDED  FALSE  FIRST  FLOAT  FLOOR  INC |  INTEGER  ISTYPE  LAST  LONGINT  LONGREAL  LOOPHOLE |  MAX  MIN  MUTEX  NARROW  NEW  NIL |  NULL  NUMBER  ORD  REAL  REFANY  ROUND |  SUBARRAY  TEXT  TRUE  TRUNC  TYPECODE  VAL |
运算符：
| 0 | 1 | 2 | 3 | 4 | 5 | 6 |
| --- | --- | --- | --- | --- | --- | --- |
| + | < | # | = | ; | .. | : |
| - | > | { | } | | | := | <: |
| * | <= | ( | ) | ^ | , | => |
| / | >= | [ | ] | . | & |  |
此外，注释是开于(*并合于*)的任意字符的序列。注释可以嵌套并可以扩展跨越多于一行。
基础性语法和语义

Modula-3承袭了ALGOL家族传统的强类型，并且为了使类型系统尽可能的统一，采用了如下原则：
首先，类型或目标类型确定是没有歧义的，所有的表达式的类型由它的子表达式来确定，而非由它的使用来确定。
其次，没有自动转换。
第三，可赋值性和类型兼容性，是依据单一的在语法上用算符<:指定的子类型关系来定义的，它具有如下性质：如果T是U的子类型，则所有的T的成员都是U的成员，子类型关系是自反和传递的；子类型关系是处理具有继承的对象所需要的，但也能用于确定常规类型的兼容性规则。
一个典型的不安全运行时间错误，是释放仍可由活跃引用（悬空指针）触及的数据结构。避免这个问题的唯一可靠方式，是不再触及存储的自动释放，或称为垃圾收集。Modula-3因而提供了有跟踪的引用，它类似于Modula-2的指针，除了它们所指向的存储被保存在有跟踪的堆之中之外，在这里它们将在到它们的引用都消失时自动释放。垃圾收集的另一个巨大利益是简化了接口，没有垃圾收集，接口就必须规定客户或实现是否有责任释放每个分配的引用，和在什么条件下可以安全的去这么做。
例外是一次退出多层作用域的控制结构。一个例外被重复的发起退出当前活跃的作用域，直到找到给这个例外的处理器（handler），并将控制权移交给这个处理器，如果没有处理器，则计算以某种依赖于系统的方式终止，比如进入调试器。在Modula-3中，EXIT和RETURN语句的语义，分别使用退出例外exit-exception和返回例外return-exception来定义。Modula-3的设计者认为语言实现，除了这种返回例外和退出例外之外，更应当以各种例外为代价，加速正常的结果产出；为每个引发的例外花费一千条指令，来为每个过程节约一条指令都是合理的。
基础性语法和语义 > 块与声明

声明介入一个常量、类型、变量、例外或过程的一个名字。这个名字的作用域是包含这个声明的块。一个块可以出现为一个模块或过程的本体，或一个块语句，Pascal和Modula-2没有块语句。一个块有如下形式：
Decls
BEGIN
    S
END
这里的Decls是成序列的声明，而S是一个语句，经常是顺序复合语句即成序列的语句，它是这个块的执行部份。这里的Decls与S在缩进上对齐，是因为在Pascal语言家族中，可能含有嵌套过程声明的声明序列的位置相较于ALGOL 60，从紧随在关键字BEGIN之后转移到了紧靠在其前面。一个块的声明可以介入一个名字最多一次，然而一个名字可以在嵌套的块中重新声明。在块中这些声明的次序，除了确定变量的初始化次序之外无关紧要。
一个Modula-3程序规定了一个计算，它作用在一序列的叫做地点（location）的数字元件之上。变量是地点的一个集合，它依据这个变量的类型所确定的约定，表示一个数学上的值（英语：）。如果一个值可以由类型T的某个变量来表示，则称谓这个值是T的一个成员，并且T包含这个值。
声明为一个变量、类型、过程、常量（英语：）或例外指定一个被称为标识符的符号（英语：）作为名字。一个声明应用于其上的程序区域，叫做这个声明的作用域。作用域是可以嵌套的。一个标识符的含义，由这个标识符在其中声明的最小的包围作用域来确定。
类型声明有如下形式：TYPE T = U，这里的T是一个标识符，而U是一个类型或类型表达式。在需要类型的各种地方，通常允许类型表达式。
变量声明有如下形式：VAR id: T := E，这里的id是一个标识符，T是除了开放数组之外的一个非空类型，而E是一个表达式。它声明了id是类型T的一个变量，其初始值是E的值。:= E和: T任何一个都可省略，但二者不能都省略。如果省略了T，它采用E的类型。如果省略了E，初始值是类型T的任意值。如果二者都存在，E必须可赋值给T。初始值是一种简写，等价于在随后的块的可执行部份开始处插入赋值id := E，如果多个变量有初始值，按它们声明的次序插入它们的赋值。形式VAR v_1, ..., v_n: T := E，是VAR v_1: T := E; ...; VAR v_n: T := E的简写。
常量（英语：）声明有如下形式：CONST id: T = C，这里的id是一个标识符，T是一个类型，而C是一个常量表达式。它声明id为具有类型T和值C的一个常量。: T可以省略，在这种情况下id的类型是C的类型。如果T存在，则它必须包含C。
基础性语法和语义 > 值与类型

Modula-3的类型系统使用结构等价（英语：），而非Modula-2的名称等价（英语：）即类型构造子的每次出现产生一个新类型。在结构等价中，在如果两个类型的定义在展开的时候，也就是在所有常量表达式都被替换为它们的值，并且所有类型名字都被替代为它们的定义的时候，变成相同的，则这两个类型是相同的。在递归数据类型的情况下，这个展开是部份展开的无穷极限。
有三种序数类型：枚举、子范围和整数类型，预定义了如下序数类型：INTEGER、LONGINT、CARDINAL（如同子范围[0..LAST(INTEGER)]）、BOOLEAN（枚举{FALSE, TRUE}）和CHAR（包含至少256个元素表示ISO-Latin-1代码的枚举）。整数和枚举元素合起来叫做序数值。序数值v如果是整数或扩展精度整数，则v的基础类型分别是INTEGER或LONGINT，否则v的基础类型是包含它的那个唯一性的枚举类型。两个序数如果有相同的值则二者相等。
有三种浮点类型：REAL、LONGREAL和EXTENDED，这些类型的属性规定在对应的必要接口中。两个浮点数如果定义它们的底层实现相同则二者相等。
一个引用值要么是NIL，要么是一个叫做所引用者（referent）的变量的地址。预定义了如下引用类型：REFANY，它包含所有的有跟踪的引用，ADDRESS，它包含所有的无跟踪的引用，和NULL，它只包含NIL。Modula-3支持在运行时间的数据分配。分配操作有如下形式：NEW(T, ...)，这里的T是除了预定义的REFANY、ADDRESS或NULL之外的引用类型。两个引用如果寻址相同的地点则二者相等。
记录是叫做这个记录的字段的命名变量的一个序列，记录类型的声明有如下形式：TYPE T = RECORD FieldList END，在这里的类型表达式中，算子（英语：）RECORD是类型构造子，而它的实际参数是字段声明的一个列表FieldList，其中每个字段都有如下形式：fieldName: Type := default，这里的字段名字fieldName是一个标识符，而字段类型Type是除了开放数组之外的非空类型，而字段缺省值default是一个常量表达式。形式f_1, ..., f_m: Type := default，是f_1: Type := default; ...; f_m: Type := default的简写。两个记录如果有相同的字段，并且对应的字段都相等则二者相等。
在Modula-3中的对象，非常类似于Simula 67中的对象：它们总是引用，它们拥有数据字段和方法二者，并且它们有着单一继承而非多重继承。预定义了如下对象类型：ROOT，它是没有字段或方法的有跟踪的对象类型，和UNTRACED ROOT，它是没有字段或方法的无跟踪的对象类型。
不透明类型（英语：）是一个名字，它指示某个给定引用类型的未知子类型。预定义了两个不透明类型（英语：）：TEXT  <: REFANY和MUTEX <: ROOT，它们分别表示文本串和互斥信号量，它们的属性分别规定于必要接口Text和Thread之中。
数组是叫做这个数组的元素的组成变量的有索引的搜集。有两种数组类型，固定的和开放的。固定数组的长度是在编译时间确定的，开放数组的长度是在运行时间分配确定的，这个长度此后不能改变。两个数组如果有相同的长度，并且对应的元素都相等则二者相等。
包装类型的变量出现在记录、对象或数组中，占据指定数量的位元，并毗邻于前导的字段或元素紧压打包。包装类型的声明有如下形式：TYPE T = BITS n FOR Base，这里的Base是一个基础类型，而n是整数取值的常量表达式。
集合是取自某个序数类型的值的搜集。集合类型声明有如下形式：TYPE T = SET OF Base，这里的基础类型Base是一个序数类型。两个集合如果有相同的元素则二者相等。
不包含值的一个类型是空的，例如[1..0]是一个空类型。空类型可以用来建造非空类型，比如SET OF [1..0]。声明一个空类型的一个变量是静态错误。
所有的表达式（英语：）都有一个唯一的类型，但是一个值可以是很多类型的一个成员，例如值6是[0..9]和INTEGER二者的成员，因此论述“一个值的类型”将会是有歧义的。短语“x的类型”，意味着“表达式x的类型”；然而短语“x是T的成员”，意味着“x的值是T的成员”。但在有一种情况下，一个值可以称为有着一个类型：所有的对象或有跟踪的引用值，包括了一个类型代码，它叫做这个引用值的分配类型。分配类型通过TYPECASE语句来测试。
语言规定提供了类型运算BITSIZE()、BYTESIZE()和ADRSIZE()，分别返回变量x或者类型T的那些变量的位元数目、8位字节的数目和可寻址地点的数目。在所有情况下，x必须是指定式，而T必须不是开放数组类型，指定式x只在它的类型是开放数组的时候求值。
基础性语法和语义 > 值与类型 > 序数类型

枚举类型声明有如下形式：TYPE T = {id_1, id_2, ..., id_n}，这里的id是各不相同的标识符，类型T是n个值的有序集合，表达式T.id_i指示这个类型在递增次序下的第i个值，空枚举{ }是允许的。
子范围类型声明有如下形式：TYPE T = [Lo..Hi]，这里的Lo和Hi是有相同的基础类型的两个序数值，T的值是从Lo到Hi含二者所有的值，它们必须是常量表达式，如果Lo超过Hi，则子范围是空的。
每个不同的枚举类型介入新的一组值，而子范围类型重复使用底层类型的值。例如：
TYPE
    T1 = {A, B, C};
    T2 = {A, B, C};
    U1 = [T1.A..T1.C];
    U2 = [T1.A..T2.C];  (* sic *) 
    V = {A, B}
这里的T1和T2是相同类型，因为它们有相同的展开定义。U1和U2也是相同的类型，因为T1.C = T2.C。类型T1和U1却是不同的，尽管它们包含相同的值，但是T1的展开定义是枚举，而U1的展开定义是子范围。类型V是第三个类型，它的值V.A和V.B无关于值T1.A和T1.B。
语言规定提供了支持序数类型的一些类型运算：对于序数类型T，NUMBER(T)返回在T中元素的数目，FIRST(T)返回T的最小值，LAST(T)返回T的最大值。ORD(T.id)将一个枚举的元素T.id，转换成表示它在枚举次序中所处位置的整数，如果元素的类型是枚举T的子范围，结果是元素在T内的位置，而非在子范围内。VAL(i, T)将表示在枚举类型T中位置的整数i，转换成在这个枚举中此位置上的那个元素，如果T是枚举类型的子范围，结果是在源出枚举类型的位置i上的元素，而非在子范围内。如果n是类型T的一个整数，则有平凡的：ORD(n) = VAL(n, T) = n。
基础性语法和语义 > 值与类型 > 数组类型

固定数组类型声明有如下形式：TYPE T = ARRAY Index OF Element，这里的索引类型Index是序数类型，而元素类型Element是除了开放数组之外的任何类型。开放数组类型声明有如下形式：TYPE T = ARRAY OF Element，这里的元素类型Element是任何类型。
数组类型T的值，是元素类型为Element的数组；对于固定数组类型，这个数组的长度是索引类型Index的元素数目；对于开放数组类型，这个数组的长度是任意的；开放数组的索引类型是INTEGER子范围[0..n-1]，这里的n是这个数组的长度。开放数组类型只能用作形式参数的类型，引用类型的所引用者，另一个开放数组的元素类型，或作为数组构造子中的类型。
多维数组的形状是它每一维的长度的序列。更精确的说，一个数组的形状是它的长度跟随着任何它的元素的形状，非数组的形状是空序列。数组如果有相同的类型和形状，则它们是可赋值的。如果赋值的要么来源要么目标是开放数组，则需要运行时间检查。形如ARRAY Index_1, ..., Index_n OF Element的表达式，是ARRAY Index_1 OF ... OF ARRAY Index_n OF Element的简写。
如果a有数组类型T，则a[i]指示a的一个指定元素，它在数组中的位置对应于i在索引类型中位置。形如a[i_1, ..., i_n]的表达式，是a[i_1]...[i_n]的简写。索引的解释由一个数组的类型确定，而非它的值；数组赋值改变数组变量的值，而非它的类型。例如：
VAR
    a := ARRAY [1..3] OF REAL {1.0, 2.0, 3.0};
    b: ARRAY [-1..1] OF REAL := a;
这里在a或b做元素值变更之前，a = b为TRUE，尽管a[1] = 1.0而b[1] = 3.0。
可以使用NUMBER(A)，得到一个固定数组类型的索引类型中的元素数目，使用FIRST(A)和LAST(A)，分别得到一个固定数组类型的索引类型的最小元素和最大元素。可以使用NUMBER(a)，得到一个数组的索引类型中的元素数目，使用FIRST(a)和LAST(a)，分别得到一个数组的索引类型的最小元素和最大元素，在这种情况下，表达式a只在它指示一个开放数组的时候求值。
基础性语法和语义 > 值与类型 > 引用类型

一个引用类型要么是有跟踪的要么是无跟踪的。当到已分配的一段存储的所有的有跟踪的引用都消失时，系统对这段存储进行垃圾回收。有跟踪的引用类型以如下形式来声明：TYPE T = REF Type，这里的Type是任何类型。T的值是到类型Type的变量的有跟踪的引用，Type叫做T的所引用类型。无跟踪的引用类型以如下形式来声明：TYPE T = UNTRACED REF Type，这里的Type是任何无跟踪的类型（这个限制在不安全模块中解除）。
两个引用类型如果都是有跟踪的或都是无跟踪的，那么它们有相同的引用类。一个一般性的类型是有跟踪类型的条件为，它是有跟踪的引用类型，其任何字段类型是有跟踪类型的记录类型，其元素类型是有跟踪类型的数组类型，或其底层未包装类型是有跟踪类型的包装类型。
在有跟踪的和无跟踪的二者情况下，关键字REF可选的可以前导上BRANDED b，这里的b是叫做铭牌（brand）的文本常量。铭牌用来区分原本上相同的类型，它们没有其他语义效果。在一个程序中所有铭牌都必须是唯一性的。如果BRANDED出现而b缺席，系统自动的为b提供一个唯一的值。
分配操作NEW(T, ...)返回T的所引用类型的一个新分配的变量的地址，如果T是对象类型，则返回到有配对的方法套件的一个新分配的数据记录的引用。NEW()返回的引用不同于所有的现存引用。这个新引用的分配类型是T。如果T的所引用类型为空则是一个静态错误。如果T是到有k个开放维度的数组的引用，NEW(T)操作有如下形式：NEW(T, n_1, ..., n_k)，这里的这些n是指定新数组在它的前k个维度上的长度的整数取值表达式。
所有的对象类型和有跟踪的引用类型（包括NULL）都有一个关联的整数代码。不同的类型有不同的代码。给一个类型的代码对程序的任何单一执行都是常量，但对不同的执行可以不同。类型运算TYPECODE(T)，返回类型T的这个代码，而TYPECODE(r)，返回引用r的分配类型的这个代码。如果T是REFANY，或者不是对象类型或有跟踪的引用类型，则是一个静态错误。类型运算ISTYPE(x, T)，测试x是否为T的成员，这里的T必须是对象类型或有跟踪的引用类型，而x必须可赋值给T。
基础性语法和语义 > 表达式

表达式（英语：）规定产生一个值或变量的一个计算。所有的表达式都有一个静态确定的类型，它包含这个表达式可以产生的所有的值。在语法上，一个表达式要么是一个运算数，要么是应用于自身也是表达式的实际参数的一个运算。运算数是标识符、文字（英语：）或类型。通过递归的求值一个运算的实际参数并应用这个运算，来求值一个表达式。实际参数的求值次序，对除了短路求值的AND和OR之外的所有运算都是未定义的。
对一个过程的调用，在这个过程是返回一个结果的函数过程的时候，是称为函数应用的一个表达式，这个表达式的类型是过程的结果类型。
Modula-3语言规定提供了前缀算术运算：+、-，中缀算术运算：+、-、*、/、DIV、MOD，数值函数运算：ABS(x)、FLOAT(x, T)、FLOOR(x)、CEILING(x)、ROUND(r)、TRUNC(r)、MAX(x, y)、MIN(x, y)，关系运算：=、#、 <=、>=、>、<，逻辑运算：NOT p、p AND q、p OR q，文本串接运算：a & b，内存分配运算：NEW(T, ...)，集合运算：并集+、差集-、交集*、对称差集/和隶属关系测试e IN s，它在序数e是集合s的元素的时候返回TRUE。
表达式可建构自如下文字（英语：）：整数文字（英语：）、实数文字、字符文字（英语：）和文本文字（英语：）。集合、数组和记录有构造子表达式：
S{e_1, ..., e_n}，这里的S是一个集合类型，而这些e是表达式或lo..hi形式的范围。这个构造子指示类型为S的一个值，它包含列出的那些值和在列出的范围中的那些值，这些e、lo和hi必须可赋值给类型S的元素类型。
A{e_1, ..., e_n}，这里的A是一个数组类型，而这些e是表达式。这个构造子指示类型为A的一个值，它包含遵循列出次序的这些列出元素，这些e必须可赋值给A的元素类型。如果A是多维数组，则这些e必须自身也是数组取值表达式。如果A是固定数组类型，并且n至少为1，则e_n可以跟随着, ..，指出e_n的值按照需要重复任意多次来填满这个数组。
R{Bindings}，这里的R是一个记录类型，而Bindings是完全同于过程调用的关键字或位置绑定的一个列表。这个绑定列表会被重写来适合R的字段和缺省值的列表，完全同于过程调用中的那些做为，记录字段名字扮演了过程形式参数的角色。这个构造子指示类型为R的一个值，它的字段值由重写后的这些绑定来指定。
常量（英语：）表达式是一般性的表达式类的子集，所要求的限制使得可以静态的求值这个表达式。在常量表达式中，除了NEW()、解引用（显式的或隐式的）、SUBARRAY()、TYPECODE()、NARROW()、ISTYPE()、ADR()和LOOPHOLE()之外的所有运算都是合法的，唯独可运用的过程，是在提供无符号字运算的Word接口中的函数。变量在常量表达式中，只能作为给FIRST()、LAST()、NUMBER()、BITSIZE()、BYTESIZE()或ADRSIZE()的实际参数出现，并且这个变量必须不是开放数组类型的。文字和顶层过程常量在常量表达式中是合法的。
基础性语法和语义 > 表达式 > 指定式

产生变量的表达式叫做指定式（designator）。常量表达式永远不是指定式。指定式的类型是它产生的变量的类型。一个指定式依赖于上下文，可以指示要么一个变量，要么这个变量的值。比如，它作为赋值的左值时是变量，作为右值时是这个变量的值。一些指定式是只读的，它们不能用在可能改变这个变量的值的上下文中，并非只读的指定式就是可写的指定式。
一个标识符是可写的指定式的条件为，它被声明为变量，是VAR或VALUE形式参数，TYPECASE或TRY-EXCEPT语句的局部变量，或绑定到可写指定式的WITH局部变量。一个标识符是只读的指定式的条件为，它是READONLY形式参数，FOR语句的局部变量，或绑定到非指定式或只读的指定式的WITH局部变量。只有如下运算可以产生指定式：
r^，这个运算叫做解引用（英语：）（dereferencing），它表示r的所引用者。表达式r^总是可写的指定式。如果r的类型是REFANY、ADDRESS、NULL、对象类型或不透明类型，则是一个静态错误；如果r是NIL，则是一个必查的运行时间错误。
a[i]，这个运算叫做下标，它表示数组a的值的第i + 1 - FIRST(a)个元素，比如说a的索引类型是[-1..1]，a[1]是这个数组的值的第1 + 1 - (-1)个即第3个元素。表达式a[i]是否为指定式进而是否可写同于a。表达式i必须可赋值给a的索引类型。如果a是到数组的引用，则这里有隐含的解引用，即这里的a[i]是a^[i]的简写。
r.f 、o.f 、I.x 、o.m 、T.m 和E.id ，这种点表示法运算叫选取（selection）。
r.f表示记录r的指名字段f，表达式r.f是否为指定式进而是否可写同于r。如果r是到记录的引用，则这里有隐含的解引用，即r.f是r^.f的简写。
o.f表示对象o的指名字段f，表达式o.f是可写的指定式。
I.x表示导入的接口I的指名实体x，如果x被声明为变量，则表达式I.x是指定式并且总是可写的。
o.m表示对象o的指名方法m，o.m不产生指定式。
T.m表示对象类型T的指名方法m，T.m不产生指定式。
E.id表示枚举类型E的值id，E.id不产生指定式。
SUBARRAY(a, from, for)，它产生数组a的越过前from个元素并包含下for个元素的子数组。SUBARRAY()不复制数组，它是否为指定式进而是否可写同于a。如果a是多维数组，SUBARRAY()只应用于顶层数组。如果from + for超过了NUMBER(a)，则是一个必查的运行时间错误。
基础性语法和语义 > 子类型规则

使用T <: U指示T是U的子类型，也就是U是T的超类型。子类型规则是：如果T <: U，则类型T的所有值，都是类型U的值，反过来则不成立。
对于序数类型T和U，T <: U的条件为，它们拥有相同的基础类型，并且所有的T的成员都是U的成员。就是说序数类型上的子类型，反映了在值集合上的子集关系。
对于数组类型，一个数组类型A是一个数组类型B的子类型的条件为，它们有相同的最终元素类型，相同的维度数，并且对于每个维度，要么二者都是开放的，要么A是固定的而B是开放的，要么它们都是固定的并有着相同的大小。
对于过程类型，T <: U的条件为，它们除了形式参数名字、缺省值和RAISES集合之外是相同的，并且T的RAISES集合包含在U的RAISES集合中。NIL是所有的过程类型的一个成员。
对于包装类型，BITS n FOR T和T有相同的值，也就是说：BITS n FOR T <: T并且T <: BITS n FOR T。
对于集合类型，SET OF A <: SET OF B的条件是A <: B，就是说集合的子类型规则简单的使用值集合规则。
对于引用类型有：
NULL <: REF T <: REFANY
NULL <: UNTRACED REF T <: ADDRESS
就是说，REFANY和ADDRESS分别包含所有的有跟踪的和无跟踪的引用，NIL是所有的引用类型的一个成员。这两个规则也适用于加铭牌的类型。
对于对象类型有：
ROOT <: REFANY
UNTRACED ROOT <: ADDRESS
NULL <: T OBJECT ... END <: T
就是说，所有对象都是引用，NIL是所有的对象类型的一个成员，而所有的子类型都包括在它的超类型之中。第三个规则也适用于加铭牌的类型。
对于所有的T，都有T <: T。对于所有的T, U, V，T <: U并且U <: V，蕴涵T <: V。就是说<:是自反和传递的。但是T <: U并且U <: T，不蕴涵T与U是相同的，因为子类型关系不受形式参数名字、缺省值和包装的影响。
基础性语法和语义 > 子类型规则 > 可赋值性

一个类型T可赋值（assignable）给类型U的条件是：
T <: U，或者
U <: T并且T是一个数组或除了ADDRESS之外的一个引用类型（这个限制在不安全模块中解除），或者
T和U是至少有一个共同成员的序数类型。
在第一种情况下，没有运行时间错误是有可能的。在第二种情况下，允许赋值一个REFANY到一个REF T，还允许赋值一个ARRAY OF T到一个ARRAY I OF T，这里分别要求对引用的类型和数组长度的运行时间检查；可以使用类型运算NARROW(x, T): T，将对象类型或有跟踪的引用类型的超类型变量当作其子类型的成员，这时需要运行时间检查，Modula-2+（英语：）介入它就是为了以安全的方式，将REFANY变量赋值给确知的实际类型REF T。在第三种情况下，常规的范围检查就能确保特定的T的成员也是U的成员。
一个表达式e可赋值给一个变量v的条件是：
e的类型可赋值给v的类型，并且
e的值是v的类型的一个成员，它不是一个局部过程，并且如果它是一个数组，则有同v一样的形状。
一个表达式e可赋值给类型T，如果e可赋值给类型T的某个变量。如果T不是一个开放数组，这等同声称e可赋值给类型T的任何变量。
基础性语法和语义 > 语句

执行一个语句产生一个计算，它可以正常产出结果（在可计算理论中称为停机），发起一个例外，导致一个必查的运行时间错误，或无限循环。如果结果是一个例外，它可以可选的配对上一个实际参数。如果一个表达式作为一个语句的执行部份而求值，这个求值引发一个例外，则这个例外成为这个语句的结果。空语句是无操作的（no-op），在语言报告中写为(*skip*)。
过程调用在这个过程是真正过程的时候是一个语句。调用一个函数过程并丢弃它的结果使用EVAL语句，它有如下形式：EVAL e，这里的e是一个表达式。它的效果是求值e并忽略其结果。RETURN语句用于从过程中返回。
赋值语句有如下形式：v := e，这里的v是可写的指定式，而e是可赋值给v所指示变量的表达式。赋值语句将v设置为e的值，v和e的求值次序是未定义的，但e会在v更新之前求值。特别是，如果v和e是有交叠的子数组，以没有元素在被用作来源之前被用作目标的方式进行赋值。
顺序复合语句有如下形式：S_1; S_2，它在Modula-2中称为“语句序列”。一些编程者使用分号作为语句终结符（terminator），另一些编程者将它用作分隔符（separator）；Modula-3允许这两种风格，语言报告将其用作分隔符。
块语句有如下形式：Decls BEGIN S END，这里的Decls是一序列的声明，S是一个语句。块介入在Decls中声明的常量、类型、变量和过程，并接着执行S。声明的名字的作用域是这个块。
基础性语法和语义 > 语句 > 选择控制结构

Modula-3提供了选择控制结构IF和CASE语句。IF语句有如下形式：
IF B_1 THEN S_1
ELSIF B_2 THEN S_2
... 
ELSIF B_n THEN S_n
ELSE S_0
END
这里的这些B是布尔表达式，而这些S是语句。ELSE S_0和每个ELSIF B_i THEN S_i都是可选的。IF语句依次求值B，直到某个B_i求值为TRUE，则接着执行S_i。如果没有表达式求值为TRUE，并且ELSE S_0存在，则执行S_0。如果没有表达式求值为TRUE，并且ELSE S_0缺席，则IF语句是无操作的（no-op）。Modula-3的CASE语句，不同于Modula-2的同名语句，它有如下形式：
CASE Expr OF  
    L_1 => S_1 
  | ...
  | L_n => S_n
    ELSE S_0 
END
这里的Expr是类型为序数类型的一个表达式，而每个L是一个列表，这个列表构成自常量表达式，或用e_1..e_2指示的常量表达式的范围，它表示从e_1到e_2含二者的值。如果e_1超出了e_2，这个范围为空。如果两个L表示的集合有交叠，或者任何常量表达式不是类型Expr的一个成员，则是一个静态错误。ELSE S_0是可选的。
CASE语句求值Expr。如果结果的值在任何L_i之中，则执行S_i。如果这个值不在任何L_i之中，并且ELSE S_0存在，则执行它。如果这个值不在任何L_i中，并且ELSE S_0缺席，则发生一个必查的运行时间错误。一些编程者使用竖杠作为初始符（initiator），另一些编程者将它用作分隔符。Modula-3允许这两种风格，语言报告将其用作分隔符。
基础性语法和语义 > 语句 > 分配类型测试

TYPECASE语句有如下形式：
TYPECASE Expr OF
    T_1 (v_1) => S_1
  | ...
  | T_n (v_n) => S_n
    ELSE S_0
END
这里的Expr是类型为引用类型的一个表达式，这些S是语句，这些T是引用类型，而这些v是标识符。如果Expr有类型ADDRESS，或者任何T不是Expr的类型的子类型，则为一个静态错误。ELSE S_0和每个(v)都是可选的。如果(v_i)缺席，形式T_1, ..., T_n => S，是T_1 => S | ... | T_n => S的简写。
TYPECASE语句求值Expr，如果结果的引用值，是任何列出的类型T_i的成员，则针对其中最小的i，执行S_i。NIL是所有引用类型的一个成员，因此NULL情况只有首先出现才能起作用。如果这个值不是列出的这些类型的一个成员，并且ELSE S_0存在，则执行它。如果这个值不是列出的这些类型的一个成员，并且ELSE S_0缺席，则发生一个必查的运行时间错误。每个(v_i)声明类型为T_i的一个变量，并且它的作用域是S_i。如果v_i存在，它在执行S_i之前被初始化为Expr的值。
可以使用TYPECASE语句测试类型为REFANY或对象的一个表达式的值的引用类型，比如写一个过程ToText(r: REFANY): TEXT，在其中测试r的值是NULL、REF BOOLEAN和REF INTEGER中的哪一个类型。
基础性语法和语义 > 语句 > 循环控制结构

Modula-3提供了循环控制结构FOR、LOOP、WHILE和REPEAT语句，和必须在字面上包围在这四个循环语句中，用于从循环中退出的EXIT语句。语句LOOP S END，循环直到S中有一个EXIT发生。语句WHILE B DO S END，被定义为：
LOOP
    IF B THEN S
    ELSE EXIT 
    END
END
语句REPEAT S UNTIL B，被定义为：
LOOP
    S; 
    IF B THEN EXIT END 
END
FOR语句有如下形式：FOR id := first TO last BY step DO S END，这里的id是一个标识符，而first和last是有相同基础类型的序数表达式，step是整数取值的表达式。而S是一个语句。BY step是可选的，如果省略，step缺省为1。标识符id指示其作用域是S的一个只读变量，其类型是first和last共同的基础类型。FOR语句的语义，可如下这样用WHILE和WITH语句精确的定义为一个块：
VAR
        i := ORD(first);
        done := ORD(last);
        delta := step;
BEGIN
    IF delta >= 0 THEN
        WHILE i <= done DO 
            WITH id = VAL(i, T) DO S END;
            INC(i, delta)
        END
    ELSE
        WHILE i >= done DO
            WITH id = VAL(i, T) DO S END; 
            INC(i, delta)
        END
    END
END
这里的T是id的类型，i、done和delta代表不出现在FOR语句中的变量。从FOR语句的这个定义可以看出，如果一个FOR循环的上界是LAST(INTEGER)或LAST(LONGINT)，就应当将它改写为WHILE循环来避免溢出。