【发布时间】:2016-12-02 09:38:29
【问题描述】:
我想制作一个允许声明数组和结构的 Dsl。我可以用这个语法做到这一点:
Set:
'SET' '(' attribute=ID ',' value=AttributeValue ')';
SimpleValue:
INT | STRING;
Structure:
'{' ID ':' AttributeValue (',' ID ':' AttributeValue)* '}';
Array:
'[' AttributeValue (',' AttributeValue)* ']' ;
AttributeValue:
SimpleValue |
Structure |
Array
;
但是,在我的解释器中,我无法确定变量的类型。不能做类似的事情:
if( s.value instanceof Array) {val Array array = s.value}
我试过这个语法:
SimpleValue:
{SimpleValue}
INT | STRING
;
Structure:
'{' ID ':' var0=SimpleValue (',' ID ':' var1=SimpleValue)* '}'
;
Array:
'[' var0=SimpleValue(',' var1=SimpleValue)* ']'
;
AttributeValue :
SimpleValue |
Structure |
Array
;
但它不起作用。在行中
if( s.value instanceof Array) {val Array array = s.value}
s.value 是红色的,带有“Type mismatch: cannot convert from AttributeValue to Array" 错误
【问题讨论】: