小编ite*_*tor的帖子

在ANTLR4语法中对第一个解析器规则进行返回声明的麻烦

我正在使用我的解析器规则的返回,它适用于除第一个之外的所有解析器规则.如果我的语法中的第一个解析器规则使用返回声明ANTLR4抱怨如下:

在匹配规则时期待ARG_ACTION

如果我添加另一个不使用"返回"的解析器规则,ANTLR不会抱怨.

在这里你有一个语法简化问题:

grammar FirstParserRuleReturnIssue;
ID  :   ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*;
aRule returns [String s]: ID { $s = $ID.text; };
Run Code Online (Sandbox Code Playgroud)

我搜索了第一条规则的特殊角色,它可以解释行为,但没有找到任何东西.这是一个错误吗?我错过了一些理解吗?

antlr4

13
推荐指数
1
解决办法
2005
查看次数

无法使用通配符编译相关的Java Generics参数

以下小Java示例将无法编译为不明原因:

package genericsissue;

import java.util.ArrayList;
import java.util.List;

interface Attribute<V> {}

interface ListAttribute extends Attribute<List<?>> {}

public class Context {
    public <T, A extends Attribute<T>> void put(Class<A> attribute, T value) {
        // implementation does not matter for the issue
    }

    public static void main(String[] args) {
        Context ctx = new Context();
        List<?> list = new ArrayList<String>();
        ctx.put(ListAttribute.class, list);
    }
}
Run Code Online (Sandbox Code Playgroud)

带有ctx.put的行会产生以下错误:

Context.java:18: <T,A>put(java.lang.Class<A>,T) in genericsissue.Context cannot be applied to (java.lang.Class<genericsissue.ListAttribute>,java.util.List<capture#35 of ?>)
Run Code Online (Sandbox Code Playgroud)

如果没有通配符工作,属性模式工作正常.

是否有任何解释为什么编译器不接受通配符键入的值?

java generics nested-generics

7
推荐指数
1
解决办法
165
查看次数

标签 统计

antlr4 ×1

generics ×1

java ×1

nested-generics ×1