【发布时间】:2013-12-12 04:15:12
【问题描述】:
场景是我想使用 ANTRL4 创建一种 BASIC(高级)语言。
下面的测试输入是创建一个名为 C$ 的变量并分配一个整数值。赋值有效。 print 语句可以工作,除非将变量连接到它:-
************ TEST CASE ****************
$C=15;
打印“危险!”; # 打印作品
打印“剩余GB数=”+ $C;
使用 Parse Tree Inspector 我可以看到分配工作正常,但是当它识别字符串中的变量时,似乎有一个不匹配的输入 '+' 期望 STMTEND。
我想知道是否有人可以在这里帮助我,看看我需要对我的规则和语法进行哪些调整来解决这个问题。
非常感谢。
凯文 PS。作为一个附带问题,我宁愿拥有 C$ 而不是 $C 但早期......
********RULES************
VARNAME : '$'('A'..'Z')*
;
CONCAT : '+'
;
STMTEND : SEMICOLON NEWLINE* | NEWLINE+
;
STRING : SQUOTED_STRING (CONCAT SQUOTED_STRING | CONCAT VARNAME)*
| DQUOTED_STRING (CONCAT DQUOTED_STRING | CONCAT VARNAME)*
;
fragment SQUOTED_STRING : '\'' (~['])* '\''
;
fragment DQUOTED_STRING
: '"' ( ESC_SEQ| ~('\\'|'"') )* '"'
;
fragment ESC_SEQ
: '\\' ('b'|'t'|'n'|'f'|'r'|'\"'|'\''|'\\')
| UNICODE_ESC
| OCTAL_ESC
;
fragment OCTAL_ESC
: '\\' ('0'..'3') ('0'..'7') ('0'..'7')
| '\\' ('0'..'7') ('0'..'7')
| '\\' ('0'..'7')
;
fragment HEX_DIGIT : '0x' ('0'..'9' | 'a'..'f' | 'A'..'F')+
;
fragment UNICODE_ESC : '\\' 'u' HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT
;
SEMICOLON : ';'
;
NEWLINE : '\r'?'\n'
************GRAMMAR************
print_command
: PRINT STRING STMTEND #printCommandLabel
;
assignment
: VARNAME EQUALS INTEGER STMTEND #assignInteger
| VARNAME EQUALS STRING STMTEND #assignString
;
【问题讨论】: