3.2 分隔符 3.3 关键字 3.4 运算符

3.2  分隔符
关键字、运算符、分隔符一起构成了一门编程语言的基本定义。3.2 、3.3 、3.4节分别对分隔符、关键字、运算符作一些介绍。如果有不详细的地方,将在本书后面部分介绍;或者是因为这些不常用到;还有一种情况是:可以被其它常用语法定义代替。
Ruby中的常用分隔符如下:

符号<o:p></o:p>

名称<o:p></o:p>

用途<o:p></o:p>

<o:p></o:p>

分号<o:p></o:p>

用来分隔一行中的多个语句<o:p></o:p>

()<o:p></o:p>

圆括号<o:p></o:p>

提高优先级;定义方法时容纳参数列表<o:p></o:p>

<o:p> </o:p>

空格<o:p></o:p>

分隔字符;在可省略()的地方,代替()<o:p></o:p>

<o:p></o:p>

逗号<o:p></o:p>

隔开多个参数<o:p></o:p>

.<o:p></o:p>

<o:p></o:p>

将对象与它的方法隔开<o:p></o:p>

::<o:p></o:p>

紧连的两个冒号<o:p></o:p>

域作用符将模块(类)与它的常量隔开<o:p></o:p>

<o:p></o:p>

 

3.3  关键字 
Ruby中的关键字如下:
模块定义:module
类定义:  class
方法定义:def , undef
检查类型:defined?
条件语句:if , then  , else , elsif ,case ,when ,unless
循环语句:for ,in ,while ,until  ,next, break ,do ,
      redo ,retry ,yield
逻辑判断:not ,and ,or
逻辑值和空值:true ,false , nil 
  异常处理:rescue  ,ensure 
对象引用:super ,self 
块的起始:begin/end
嵌入模块:BEGIN ,END 
文件相关:__FILE__ , __LINE__
方法返回:return  
别名:    alias
BEGIN模块相当于C语言中的宏, END模块用来作一些收尾工作。有了require,include,应该取消BEGIN和END的语法定义。

 3.4  运算符

Ruby中的运算符如下:
 

优先级
能否重写
运算符
描述
最高
Y
[]   []=
数组下标     数组元素赋值
 
Y
**
乘冥
 
Y
~ + -
  位非  一元加    负号
 
Y
*   /   %
   
 
Y
+ -
 
 
Y
>>   <<
右移     左移
 
Y
&
位与
 
Y
^ |
位异或     位或
 
Y
<=    <    >    >=
小于等于     小于     大于    大于等于
 
Y
<=>    ==     ===      =~    !=     !~
各种相等判断( != !~ 不能重写)
 
 
&&
短路与
 
 
||
短路或
 
 
..    ...
区间 的开始点到结束点
 
 
? :
三元条件运算符
 
 
= %= ~= /= -= += |= &= >>= <<= *= &&= ||= **=
各种赋值
例如: a = 5;
b += 3( 意思是: b = b+3 )
 
 
defined?
检查类型
 
 
not
逻辑非
 
 
or and
逻辑或  逻辑与
 
 
if unless while until
判断与循环
最低
 
begin/end
定义方法、类、模块的范围

 

完整阅读,请看我写的 Ruby语言中文教程all in one    
 

第1关:词法分析程序设计与实现 100 任务要求 记录 评论 任务描述 相关知识 词法分析的基本知识 实验步骤 编程要求 测试说明 任务描述 本关任务:加深对词法分析器的工作过程的理解;加强对词法分析方法的掌握;能够采用一种编程语言实现简单的词法分析程序;能够使用自己编写的分析程序对简单的程序段进行词法分析。 相关知识 为了完成本关任务,你需要掌握:词法分析程序设计与实现。 词法分析的基本知识 词法分析程序( Lexical analyzer,简称 Lexer ),负责从左到右逐个字符地对源程序进行扫描和分解,根据语言的词法规则识别出一个个的单词符号。 因此一个词法分析程序应具备如下功能: 从左至右扫描构成源程序的字符流 识别出有词法意义的单词 返回单词记录,或词法错误信息 由上可知词法分析中的一个重要环节为识别单词符号类型,为了便于语法分析,通常将单词符号分为五类。 标识符 用来命名程序中出现的变量、数组、函数、过程、标号等,通常是一个字母开头的字母数字串,如 length,nextch 等。 基本字 也可以成为关键字或保留字。如 if,while,for,do,goto 等。他们具有标识符的形式,但他们不是由用户而是由语言定义的,其意义是约定的。多数语言中规定,他们不能作为标识符或者标识符的前缀,即用户不能使用它们来定义用户使用的名字,故我们称它为保留字,这些语言如 Pascal 和 C 等。但也有的语言允许将基本字作为标识符或者标识符的前缀,这类语言如 Fortran 等。 常数 包括各种类型的常数,如整型、实型、字符型、布尔型等。如:5、3.1415926、a、TRUE等都是常数。 运算符 算术运算符+、-、×、÷;关系运算符<,<=,>,>=,==,!=以及逻辑运算符&&,(),||或者!等。 界符 如,、;等单字界符和/,/,//等双字界符,空白符等。 在进行词法分析后,识别出来的单词应该采用某种中间表示形式,以便为编译后续阶段方便地引用。通常一个单词用一个二元式来表示: (单词类别,单词的属性) 其中,第一元用于区分单词所属的类别,以整数编码表示。第二元用于区分该类别中的哪一个单词符号,即单词符号的值。 实验步骤 由一个词法分析程序应具备的功能来看,我们的程序具有如下要求: 对单词的构词规则有明确的定义; 编写的分析程序能够正确识别源程序中的单词符号; 识别出的单词以<种别码,值>的形式保存在符号表中,正确设计和维护符号表; 对于源程序中的词法错误,能够做出简单的错误处理,给出简单的错误提示,保证顺利完成整个源程序的词法分析; 下面我们进行实验代码的步骤分析。 定义目标语言的可用符号表和构词规则。 我们需要对五种单词符号进行识别分析,这里将单词符号分为三大块进行识别。首先判断字符是否为关键字或者标识符,并与已定义好的关键字进行比较,从而判断为关键字或者标识符;然后是数字的识别;最后是其他字符的判断,它们被一一定义好的判断进行识别,这样所有的字符便被识别出来了。标示符和关键字的判断 if ((ch >= &#39;a&#39; && ch <= &#39;z&#39;) || (ch >= &#39;A&#39; && ch <= &#39;Z&#39;)) //可能是标示符或者关键字 字符与关键字的区别通过对比得出: if (strcmp(token, rwtab1[n]) == 0) { syn = 2; break; } else if (strcmp(token, rwtab[n]) == 0) { syn = 1; break; } } 对于数字的识别: else if ((ch >= &#39;0&#39; && ch <= &#39;9&#39;)) //数字 其他字符的识别,他们被一一定义进行识别: else switch (ch) //其他字符 { case&#39;<&#39;:m = 0; token[m++] = ch; ch = prog[p++]; if (ch == &#39;>&#39;) { syn = 4; token[m++] = ch; } else if (ch == &#39;=&#39;) { syn = 4; token[m++] = ch; } else { syn = 4; p--; } break; case&#39;>&#39;:m = 0;
03-08
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值