打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
使用ANTLR构建PowerScript语法分析器(3) | OutOfMemory

使用ANTLR构建PowerScript语法分析器(3)

转义字符(Special ASCII Characters)
PowerScript中转义字符是以波浪号(~)开头。下图是PowerScript支持的完整的转义字符,#字符表示数字。Decimal由三个十进制数组成,范围是000-255;Hexadecimal由两个十六进制数组成,范围是00-FF;Octal由三个八进制数组成,范围是000-377。



注意:#表示数字是必须的。比如,必须用~007这种样式来表示转义字符,而不能是~7这种样式。

这里是转义字符的词法代码

ESCAPE    :   '~' ('n'|'t'|'v'|'r'|'f'|'b'|'\"'|'\''|'~')    |   DecimalEscape    |   HexEscape    |   OctalEscape    ;fragmentDecimalEscape    :   '~' ('0'..'1') ('0'..'9') ('0'..'9')    // 000 - 199    |   '~' '2' ('0'..'5') ('0'..'5')   // 200 - 255    ;fragmentHexEscape    :   '~h' ('0'..'9'|'a'..'f'|'A'..'F') ('0'..'9'|'a'..'f'|'A'..'F')  // 00 - FF    ;fragmentOctalEscape    :   '~o' ('0'..'3') ('0'..'7') ('0'..'7')   // 000 - 377    ;

续行(Statement Continuation)
通常情况下,PowerScript的一条语句书写在一行上,语句书写完毕后,按Enter键转到下一行,开始下一条语句。有时候,为了阅读方便等原因,需要把一条语句书写在几行上,这时就需要使用续行符了。PowerScript的续行符是&字符,它放在一行的末尾指示下一行是当前行的继续,并且续行符必须是一行的最后一个字符。

CONTINUEDLINE    :   '&' NEWLINE    ;

字符和字符串常量(Character and String Literal)
PowerScript程序中字符和字符串文字常量没有明显的区别。字符文字常量是指由单引号(‘)或双引号(“)括起来的一个ASCII字符,例如:
char c
c = ‘T’
c = “T”
字符串文字常量则是指由单引号(‘)或双引号(“)括起来的不多于1024个的ASCII字符,例如:
string s
s = ‘This is a string’
s = “This is a string”
由于两者没有明显区别,因此在词法分析阶段只能将两者都作为字符串文字常量来处理。至于到底是字符还是字符串文字常量,只有到了语意分析阶段才能作出判断(字符串文字常量支持续行符)。

STRING_LITERAL    :   ( '\'' (ESCAPE|CONTINUEDLINE|~('~'|'r'|'n'|'\''))* '\''        | '\"' (ESCAPE|CONTINUEDLINE|~('~'|'r'|'n'|'\"'))* '\"'        )        {            System.out.println("string>" + getText());        }    ;

数字和布尔常量(Numeric and Boolean Literal)

INTEGER_LITERAL    :   ('0'|'1'..'9' ('0'..'9')*)    ;FLOAT_LITERAL    :   ('0'..'9')+ '.' ('0'..'9')* Exponent?    |   '.' ('0'..'9')+ Exponent?    |   ('0'..'9')+ Exponent?    ;BOOLEAN_LITERAL    :   ('true'|'false')    ;fragmentExponent    :   ('e'|'E') ('+'|'-')? ('0'..'9')+    ;

标识符(Identifier)
标识符规则可以参看《PowerBuilder标识符versus Java标识符》一文,以下是标识符的词法代码。

IDENTIFIER    :   Letter (Letter|'0'..'9'|'$'|'#'|'%')*    // 暂时不支持短横线(-)        {            System.out.println("identifier>" + getText());        }    ;fragmentLetter    :   ('A'..'Z'|'a'..'z'|'_')    ;

问题:PowerScript是否支持变量名的续行?
PowerBuilder V9.0 Build 5507 不支持
PowerBuilder V9.0.1 Build 7171 不支持
PowerBuilder V8.0.3 Build 9704 不支持

Do not split a line by inserting the continuation character within a variable name. This causes an error and the statement fails.

结论:PowerScript不支持变量名的续行。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
Python3 自学第4天:字符串
C#中转义字符
Oracle中的单引号和双引号
Python 基本数据类型介绍
C#梳理【常量】
科技·Kotlin从入门到精通,基本数据类型
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服