翻译:ShiningRay @ Nirvana Studio 原文地址: http://www.refactory.com/Software/SmaCC/Tutorial.htm 这是一个用于演示一些SmaCC(Smalltalk编译器的编译器)的简要指南。在这个例子中,我们会逐步开发一个简易的计算器。 如果你已经做过这种东西,你可以先 载入代码 。你载入了代码之后,你需要打开SmaCC解释器生成器。在VisualWorks 和 VisualAge中,它在Tools菜单下。Dolphin的在一个额外的工具目录中。它会打开一个类似下面的窗口: 我们第一个计算器相对比较简单。它只要能读取两个数字并把它们相加。开始之前,我们首先要告诉扫描程序如何辨认一个数字。数字由一个或多个数字打头,后面可能还有一个小数点加上0或者更多的数字。扫描程序对这个标记的定义是: <number> : [0-9]+ (\. [0-9]*) ? ; 把这行代码输入界面上的scanner标签页中。让我们逐个看每一个部分: <number> 指出记号的名字。在<>中的名称必须是合法的Smalltalk变量名。 : 分隔记号名称和记号定义。 [0-9] 匹配任何一个在’0′到’9′(一个数字)范围中的字符。 + 匹配前面的表达式一次或多次。在这种情况下,我们要匹配一个或多个数字。 ( … ) 标示子表达式组。 \. 匹配 ‘.’ 字符(. 在正则表达式中有特殊的含义,使用 \ 来转义)。 * 匹配前一个表达式零次或多次。 ? 匹配前面的表达式零次或一次。(也就是,前面表达式是可选的)。 ; 终止一个记号说明。 我们不想去关心我们语言中的空白符,所以我们需要定义什么是空白符并且忽略它,输入下面的记号说明: <whitespace> : \s+; \s 会匹配任何空白字符(空格、制表符、换行、回车等等)。然后我们怎么告诉扫描程序去忽略它呢? 如果你看一下SmaCCScanner类,你会发现一个叫做’whitespace’的方法。如果一个扫描程序有一个方法的名称和某个标记一样,那么一旦扫描程序匹配了这类标记就会调用这个方法。正如你所见,whitespace方法会吃掉空白符。同样还有一个’comment’方法会作类似的处理。 说到我们的语法,现在让我们来定义它吧。在Parser表格中输入以下语法说明: Expression [...]
关于我
- 曹力
- 程序员 / 架构师
- JavaScript高级程序设计译者
- NirvanaStudio精神领袖
版权声明
本 Blog 所有文章若无特别声明都遵循创作共用约定,要求署名、非商业、保持一致。转载时请先阅读以上许可协议,并以超链接形式注明出处。分类目录
-
RSS Links
Blogroll
Nirvana Studio
其他
标签
功能
-
