谷歌simple框架中文文档.docx
- 文档编号:8153424
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:68
- 大小:237.20KB
谷歌simple框架中文文档.docx
《谷歌simple框架中文文档.docx》由会员分享,可在线阅读,更多相关《谷歌simple框架中文文档.docx(68页珍藏版)》请在冰豆网上搜索。
谷歌simple框架中文文档
Simple语言定义
草案
2009年6月
作者:
HerbertCzymontek
翻译:
Janeky(阿健)
Email:
rojaneky@
注意:
此翻译版本可能不是最新的。
详细信息参阅官方网站或发邮件查询
Simple语言定义-byJaneky
语法
Simple语言采用“扩展巴克斯格式”(ExtendedBackus-NaurForm–EBNF).以下一些标志将
会被用到:
y
|-用于分开一个个可供选择的对象,即“或”。
y()-定义一个组合
y[]-指定一个选择(0或者1次)从里面定义的对象中选择0个或者1个
y{}-指定重复对象(0或者n次)
词法标志都将用黑体和蓝色突出显示,例如,数字1:
1。
词法结构
源文件是纯文本文件。
缺省的字符编码是UTF-8。
跟其他BASIC编程语言不同,Simple语言是区分大小写的。
行尾结束字符
Simple语言由“行”(line)构成。
所有的语法都由“行结束字符”区分开。
以下的“行尾
结束字符”能够被识别:
y
y
y
Unicode字符\u000D(CR-回车)。
Unicode字符\u000A(LF-换行)。
Unicode字符\u000D(CR-回车)后面跟着\u000A(LF-换行)
(-译者注:
Windows环境)
EndOfLine:
=(CR|LF|CRLF)
可以用一个“行连续符”(Unicode\u005F(_下划线))放在行结束字符前面取消换行功能。
(注意,合法标识符的第一位不能是“_”)
空白符
以下的字符被称为空白符,用以区分一个个token:
y
y
Unicode\u0009(TAB-tab制表符)
Unicode\u000B(VT–纵向制表符)
Simple语言定义-byJaneky
y
y
Unicode\u000C(FF-换页符号)
Unicode\u0020(SP-空白键符)
Whitespace:
=(TAB|VT|FF|SP)
Tokens
从源文件读入的字符串被分成一系列的tokens。
Tokens是语法的终结符。
编译器总是先尝试
寻找可能存在的最长字符串来定义一个token。
例如,输入字符串“a<
符a,左移运算符<<和标识符b。
而字符串“a<
和标识符b
注释
注释等同于空白符。
Simple语言目前只是支持单行注释。
注释以单引号’(Unicode\u0027)
开始,以行尾结束符结束。
注释不能以一个字符串常量开始。
Comment:
=‘{任何的Unicode字符除了行尾结束符}EndOfLine
关键词
以下的字符系列都是关键词,不能用于定义标识符
Keywords:
=Alias|And|As|Boolean|ByRef|Byte|ByVal|Case|Const|Date|Dim|
Double|Each|Else|ElseIf|End|Error|Event|Exit|For|Function|Get|If|In|
Integer|Is|IsNot|Like|Long|Me|Static|Step|String|Sub|Then|To|TypeOf|
Until|Variant|While|Xor
标识符
一个标识符是以一个符合Java标准的字母符号(lettercharacter),加上若干个符合Java标
准的字母(letters)或者符合Java标准的数字符号(Javadigitcharacters)或者下划线_。
Java
字母就是经过java方法java.lang.Character.JavaLetter()计算能返回true的字符。
而Java数
字字符就是经过java方法java.lang.Character.JavaDigit()计算能返回true的字符。
Simple语言定义-byJaneky
一个合法的标识符不能是关键词。
Identifier:
=JavaLetter{JavaLetter|JavaDigit|_}
Literals(常量,变量,字面值,类型?
)
Literal是指一种固定类型的值。
Simple语言有interger(整型),floatingpoint(浮点型),Boolean
(布尔型),string(字符型)和object(对象型)
Literal:
=IntegerLiteral|FloatingPointLiteral|BooleanLiteral|StringLiteral|ObjectLiteral
整型(IntegerLiterals)
整型适用于Inteter类型或者Long类型精度计算的数值常量。
可以用十进制或者十六进制来
表示整型。
整型通常是无符号的正数,如果需要表示负数,需要在前面增加负号“-”运算
符。
IntegerLiteral:
=DecimalIntegerLiteral|HexIntegerLiteral
DecimalIntegerLiteral:
=0|NonZeroDigit{Digit}
NonZeroDigit:
=1|2|3|4|5|6|7|8|9
Digit:
=0|NonZeroDigit
HexIntegerLiteral:
=&HHexDigit{HexDigit}
HexDigit:
=Digit|A|B|C|D|E|F
浮点型(FloatingPointLiterals)
浮点型适用于Single类型或者Double类型精度计算的数值常量。
浮点型通常是无符号的。
如果要表示负数,需要加负号运算符“-”前缀
FloatingPointLiteral:
=DecimalIntegerLiteral.Digit{Digit}[Exponent]
Exponent:
=E[+|-]DecimalIntegerLiteral
Simple语言定义-byJaneky
布尔类型(BooleanLiterals)
布尔类型是指Boolean修饰的,包括两个值true或者false。
BooleanLiteral:
=True|False
字符串类型(StringLiterals)
字符串类型是指用双引号“前后修饰的Unicode字符串。
一个字符串类型就是用String修饰
的量。
如果我们要在一个字符串类型里面用到双引号本身,需要在双引号前面加反斜杠“\”。
同理,要表示反斜杠本身也需要加反斜杠。
还有换行符(\n),回车键(\r),制表符(\t)和
换页符(\f)也是同样道理。
StringLiteral:
=“{StringCharacter}”
StringCharacter:
=InputCharacterexcept“and\|
InputCharacter:
=any16-bitUnicodecharacter
EscapedCharacter:
=\\|\”|\n|\r|\t|\f
EscapedCharacter
对象类型(ObjectLiteral)
如果一个Object类型对象不表示任何object,可以用Nothing修饰
ObjectLiteral:
=Nothing
分隔符(Separators)
分隔符包括以下:
Separator:
=(
|
)
|
|
:
Simple语言定义-byJaneky
运算符(Operators)
Simple语言运算符包括以下:
Operator:
=<<|<|<=|=|<>|=>|>|>>|&|+|-|\|*|/|^|.
类型和值(TypesandValues)
基本类型
Type:
=NonArrayType|ArrayType
NonArrayType:
=Boolean|Byte|Short|Integer|Long|Single|Double|String|
Date|Variant|ObjectType|ArrayType
Boolean类型
Boolean类型用来表示两个逻辑值:
true和false。
Simple语言中定义为True和False
Byte类型
Byte类型表示8位的有符号整数值,在-128到127之间
Short类型
Short类型表示16位的有符号整数值,在-32768到32767之间
Integer类型
Integer类型表示32位的有符号整数值,在-2147483648到2147483647之间
Simple语言定义-byJaneky
Long类型
Long类型表示64位的有符号整数值,从-9223372036854775808到9223372036854775808
Single类型
Single类型代表32位的单精度浮点数,遵循IEEE754标准
Double类型
Double类型代表64位的双精度浮点数,同样遵循IEEE754标准
String类型
String类型表示一系列的字符串(可能是空)
Date类型
Date类型跟Java中的java.util.Calendar类相匹配
Variant类型
Variant类型是一种分解的集合(disjointunion),可以表示任何顺序的其他数据类型(基本
类型、数组,对象类型等)
Array类型
ArrayType:
=NonArrayType([Expression{,Expression}]|{,})
Array类型表示相同类型元素的集合,可以通过下标来访问。
一个Array可以有一维或者多
维(最多256)
Simple语言定义-byJaneky
Array可以先确定每维的元素个数,或者不确定(动态决定size)
Object类型
Object:
=Object|Identifier
Object类型的值是其引用的object实例,或者表示没有任何实例,Nothing。
继承(Inheritance)
被认为是设计阶段(designtime)的性质,意味着没有外在的语法来确定object的关系。
除
此之外的信息存储在源文件的一个特定区域(更多关于源文件格式的信息见附录)。
Simple
支持接口的继承和实现。
一个接口Interface对象只能定义常量和没有函数体的函数声明。
Object(接口除外)有两个预先定义的事件event
y
y
当Object的任何成员被第一次引用时,Load事件会发生
当配置一个object实例时(属于New运算符的一个执行阶段),Initialize事件会发
生
缺省值
下面展示了各种类型的缺省值,变量总是隐式地被预先分配缺省值(根据类型不同而不同)
Boolea
n
Byte
Short
Integer
Long
Single
Double
String
Date
Variant
Array
Object
False
0
0
0
0
0.0
0.0
“”
Nothing
any
Nothing
Nothing
default
value
类型转换
下表展示了类型之间转换的效果
Simple语言定义-byJaneky
Simple语言定义-byJaneky
Simple语言定义-byJaneky
Wider类型和Narrow类型
对于数值和类型而已,一个wider类型比一个narrower类型拥有更大的值域范围。
Narrower
类型转成wider类型,可能会被截断,造成精度缺失。
当Single和Double转成Long或者
Integer,小数部分被截成0。
Boolean类型可以看做是表示-1和0,是一个范围最小的数值类
型
Narrow
Wide
Boolean
Byte
Short
Integer
Long
Single
Double
对于object类型,一个基本的object可以认为是wider类型,而一个派生object却是narrow
类型。
程序构成单元ProgramUnits(aka源文件)
SimpleProgramUnit:
={Aliasdeclaration}
{Declaration}
PropertiesSection
一个Simple程序单元由一系列的声明构成。
声明别名(aliasdeclarations)仅限制在每个程
序单元的开始处。
所有的程序单元都以一个属性区域(如附录中描述)结束。
这个熟悉区域
由特定的工具维护,不能直接修改。
Simple共有3种不同的程序单元,他们的区别在于各自的属性区域存储的内容不同
y
y
y
Object程序单元可以定义对象object或者从基类派生
Interface程序单元用于定义一个接口,不能包含任何的实现
Form程序单元用于定义一个用户接口UI的表单
所有的程序单元必须定义在一个包(package)内。
一个package就是一个命名空间,用于区
分相同名字的程序单元。
包可以嵌套。
一个嵌套包的包名由最外层的包名加上被嵌套的包名,
它们之间用点“.”分隔开。
Simple语言定义-byJaneky
声明Declaration
Declaration:
=
VariableDeclaration
|
ConstantDeclaration
PropertyDeclaration
|
FunctionDeclaration
|EventDeclaration
|
|
ProcedureDeclaration
|
EventHandlerDeclaration
不存在隐式的声明
变量声明VariableDeclaration
VariableDeclaration:
=
[Static]DimIdentifierAsType{,IdentifierAsType}
变量可以使一个对象数据成员,或者是局部变量。
它们都将被初始化为各自类型的缺省值。
对象数据成员可以声明为静态Static,所有的该对象实例共同引用一个静态数据成员。
而非
静态(实例)成员都各自分配一个对象实例
‘正确例子:
变量声明
Dimdata1AsInteger
‘实例数据成员
StaticDimdata2AsInteger,data3AsInteger‘对象数据成员
SubFoo()
DimlocalDataAsInteger‘局部变量
EndSub
‘错误例子:
变量声明
SubFoo()
StaticDimlocalDataAsInteger‘编译时期错误:
不能有‘静态’局部变量
EndSub
Simple语言定义-byJaneky
常量声明
ConstantDeclaration:
=
ConstIdentifierAsType=ConstantExpression{,IdentifierAsType=
ConstantExpression}
常量必须是一个对象数据成员,必须在声明的时候初始化赋值。
‘正确例子:
常量声明
ConstZEROAsInteger=0
ConstONEAsInteger=ZERO+1,TWOAsInteger=ONE+1
‘错误例子:
常量声明
DimZeroAsInteger
ConstZEROAsInteger=Zero‘编译时期错误:
需要常量值
SubFoo()
ConstLOCAL_ZEROAsInteger=0‘编译时期错误:
不存在局部常量
EndSub
函数Functions和过程Procedure声明
FunctionDeclaration:
=
[Static]FunctionIdentifier([FormalArguments])AsType
Statements
EndFunction
ProcedureDeclaration:
=
[Static]SubIdentifier([FormalArguments])
Statements
EndSub
Simple语言定义-byJaneky
FormalArguments:
=FormalArgument{,FormalArgument}
FormalArgument:
=[ByRef|ByVal]IdentifierAsType
函数和过程都是对象成员,都是可嵌套的。
两者之间的不同在于:
函数有一个返回值而过程
没有。
函数隐式声明一个局部变量来保存返回值,该局部变量命名跟函数名相同。
当函数结
束时,该变量的值就是函数的返回结果值。
除非特别声明,参数默认是按值传递。
关键字ByVal是可选的。
当参数被关键字ByRef修
饰时,就变成按引用传递。
此时,当一个l-value按引用传递给参数时候,所有被调用实参
的修改都将反映到l-value的值。
如果一个r-rvalue按引用传递给参数,它将被当做按值传
递
‘函数和过程声明例子
SubParenthesizedExpressionExamples()
Dimpar1asInteger,par2AsInteger,par3AsInteger
par1=1
par2=2
par3=3
TestProcedure(par1,par2,par3,TestFunction())
‘par1还是1,par2还是2,但是par3变成4,第四个实际参数不是一个lvalue-
所以没有变化
EndSub
SubTestProcedure(par1AsInteger,ByValpar2AsInteger,ByRefpar3AsInteger,
ByRefpar4AsInteger)
par1=2
par2=3
par3=4
par4=5
EndSub
FunctionTestFunction()AsInteger
TestFunction=4‘会返回4
EndFunction
Simple语言定义-byJaneky
属性声明PropertyDeclaration
PropertyDeclaration:
=
PropertyIdentifierAsType
[Get
Statements
EndGet]
[Set
Statements
EndSet]
EndProperty
属性是对象成员。
一个属性声明可以定义一个getter函数和/或一个setter函数。
如果没有
什么setter函数,那么该属性是只读的,不能放在一个赋值语句的左边被引用。
如果不定义
getter,就变成只写的,只能在一个赋值语句的左边被引用
getter函数隐式声明一个跟属性同名的局部变量。
当getter函数结束时,该变量的值就是属
性的值。
setter函数同样也有一个类似的局部变量。
当setter开始执行时,这个变量值就被
赋值成属性的值。
一个属性的getter和setter函数不能再声明任何正式的参数
‘属性声明例子
DimcurrentStatusAsString‘BackingstorageforStatusproperty
PropertyStatusAsString
Get
Status=currentStatus‘返回status
EndGet
Set
currentStatus=Status‘保持status
StatusLabel.Text=Status‘更新StatusLabel
EndSet
EndProperty
Simple语言定义-byJaneky
SubSomeProcedure()
Status=“Greate!
”将currentStatus赋值“Greate!
”,同时显示StatusLabel的文本
EndSub
事件声明
EventDeclaration:
=
EventIdentifier([FormalArguments])
EndEvent
事件属于对象成员。
事件声明定义一个事件,该事件可以被RaiseEvent语句触发
‘声明一个事件的例子
EventTestEvent(strAsString)
EndEvent
事件处理声明
EventHandlerDeclaration:
=
EventIdentifier.Identifier([FormalArguments])
[Statements]
EndEvent
事件处理声明同样属于对象成员。
一个对象处理器跟一个过程(procedure)类似,但是不能
被直接触发。
事件处理器都是由定义该事件的对象的RaiseEvent语句调用。
一个事件处理
器定义了一个对象实例数据成员(第一个Event关键字前面标识符)和一个事件(第二个标
识符)。
实例数据成员必须在eventhandler所在的对象中声明。
实例数据成员必须定义相关
的事件。
‘定义事件处理器的相关例子
Simple语言定义-byJaneky
DimObjAsObjectWithEvent
‘该变量包括了已定义一个TestEvent的对象
EventObj.TestEvent(strAsString)
StatusLabel=“Status:
“&str
EndEvent
别名声明Alias声明
AliasDeclaration:
=
AliasIdentifier=QualifiedIdentifier
别名声明为一个已经存在的名字重新定义了别名。
后面使用这个别名就等同于使用全名。
别
名声明只能在变量,函数,过程,属性
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 谷歌 simple 框架 中文 文档