|
|
Label: ♦chinese
fu
created at Saturday, 2009-03-28, 21:08:45
fu
modified at Monday, 2009-06-08, 08:23:43
0 Replies, 741 Hits
道(Dao)语言规范说明1.1 (草稿: Alpha 1) - 词法结构
道语言源程序是由使用UTF-8编码(一与ASCII兼容的多字节Unicode编码)的文本表示。 程序的源代码里的有些字符在进行词法解析时会被自动转换。
Unicode编码区间0xff00-0xff5f的全角字符将被转换为相应的半角字符。 这种转换仅在注释和字符串常量以外的部分进行。 这种转换主要是为了加强对使用非西方语言编程的支持。
道语言主要使用井号#来标记注释, 使用双斜杠的C++风格注释方法也将被支持:
用来标记字符串常量的基本引号是ASCII单引号0x27和双引号0x22。 此两种引号的全角符号和Unicode里的左右单双引号也都被作为字符串常量 标记引号处理。
当为字符串常量处理引号时,这些引号需要象上表中 左引号 和 右引号 列所列出的方式配对。 (TODO: 适当处理注释里未配对的引号,和前面有反斜杠的引号; 并不再支持重音符0x60作为引号)
下面的关键字为道语言所保留:
Keyword ::= Kwd1 | Kwd2 | Kwd3 | Kwd4 | Kwd5
| Kwd6 | Kwd7 | Kwd8 | Kwd9
基本字符类:
DecDigit ::= '0' ... '9'
这里 iswalpha() 和 iswalnum() 是两个C99函数,
用于判别宽字符是否属于某个字符类。这里 WideChar
可以是多于一个字节,这种情况下,这些UTF-8字节将被转换到Unicode编码,
然后再使用这些C99函数作判别。HexDigit ::= DecDigit | 'a' ... 'f' | 'A' ... 'F' AsciiLetter ::= 'a' ... 'z' | 'A' ... 'Z' WideChar ::= "UTF-8 encoded unit of one or more bytes" WideAlpha ::= WideChar & iswalpha( WideChar ) != 0 WideAlnum ::= WideChar & iswalnum( WideChar ) != 0
AsciiIdentifier ::= ( AsciiLetter | '_' ) ( AsciiLetter | DecDigit | '_' )*
WideIdentifier ::= ( WideAlpha | '_' ) ( WideAlnum | '_' )* Identifier ::= AsciiIdentifier | WideIdentifier
DecInteger ::= DecDigit+
HexInteger'L'暂未支持。HexInteger ::= ( '0x' | '0X' ) DecDigit+ Integer ::= DecInteger | HexInteger LongInteger ::= Integer 'L' 浮点数常量:
DotDec ::= DecDigit* '.' DecDigit+
DecDot ::= DecDigit+ '.' DecDigit* DecSinglePrecision ::= DotDec | DecDot DecNumber ::= DecInteger | DecSinglePrecision SciSinglePrecision ::= DecNumber 'e' [ '+' | '-' ] DecInteger SciDoublePrecision ::= DecNumber 'E' [ '+' | '-' ] DecInteger Float ::= DecSinglePrecision | SciSinglePrecision Double ::= DecNumber 'D' | SciDoublePrecision 复数虚部常量:
ComplexImaginary ::= '$'
基本字符串常量:
SingleQuoteString ::= ' ' ' ValidCharSequence ' ' '
DoubleQuoteString ::= ' " ' ValidCharSequence ' " ' 使用全角引号的字符串常量:
DBCSingleQuoteString ::= ' ' ' ValidCharSequence ' ' '
DBCDoubleQuoteString ::= ' " ' ValidCharSequence ' " ' 使用Unicode左右引号的字符串常量:
USingleQuoteString ::= ' ‘ ' ValidCharSequence ' ’ '
UDoubleQuoteString ::= ' “ ' ValidCharSequence ' ” ' 这里 ValidCharSequence 是一串不含将它引起来引号的字符串, 不过这些引号可以以转义字符的形式出现在 ValidCharSequence。 下面的字符串常量是有效的:
' " '
' “ ' # 引号是 ', 因此 " “ 可以直接出现在字符串里 " ' " " ” " “ ' ' ” # 其他引号也类似 ' \' ' " \" " 字符串常量:
MultiByteString
这里重复标记表示两个或多个 MultiByteString 或 WideCharString 放在一起,
它们将会在词法转换时被连接成一个字符串常量。::= SingleQuoteString | DBCSingleQuoteString | USingleQuoteString WideCharString ::= DoubleQuoteString | DBCDoubleQuoteString | UDoubleQuoteString String ::= MultiByteString+ | WideCharString+
转义字符:
UnaryOperator ::= LeftUnaryOperater | RightUnaryOperator
Operator ::= UnaryOperator | BinaryOperator | AssignmentOperator | OtherOperator
象其他某些语言一样,分号可以用来标记一句程序语句的结束。 不过这种分号的使用不是必须的,道语言的编译器可以根据一些 语义规则来确定程序语句的边界。
宏标识符:
MacroIdentifier ::= '$' ( 'VAR' | 'EXP' | 'ID' | 'OP' | 'BL' ) Identifier
宏分隔符:
MacroSeperator ::= '\(' | '\)' | '\{' | '\}' | '\[' | '\]'
| '\|' | '\!' | '\*' | '\+'
Source URL:
http://www.daovm.net/space/dao/thread/95
Comments
|
fu: Many thanks (Jul.04,04:29) klabim: fixed Hi, great, now my test works now :- ). (Jun.30,17:51) Nightwalker: Few suggestions (Jul.03,14:37) |