1
该场景是我想用ANTRL4创建BASIC(高级)语言。Antlr4语法/规则 - 解决BASIC打印变量的问题
下面的测试输入是创建一个名为C $的变量并分配一个整数值。值的分配工作。打印语句的工作,除非该变量串联到它: -
************ TEST CASE ****************
$ C = 15;
print“dangerdanger!”; #print works
print“剩余的GB数量=”+ $ C;
使用解析树督察我可以看到分配是工作正常,但是当它到达字符串中的变量的标识,似乎有一个不匹配的输入“+”期待STMTEND。
我想知道是否有人可以帮助我,看看我需要对我的规则和语法做出什么调整来解决这个问题。
非常感谢提前。
Kevin 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
;
太棒了!非常感谢你做的这些。 – KevinY