当前位置: 首页 > 知识库问答 >
问题:

在GO中的AntLR4:无效类型断言:侦听器

平元明
2023-03-14

我从Antlr4语法生成了Go语言的解析器。

语法在这里:https://raw.githubusercontent.com/antlr/grammars-v4/master/solidity/solidity.g4

代码段:func(s*SourceUnitContext)EnterRule(listener ANTLR.ParsetreeListener){if listenerT,ok:=listener.(SolidityListener);ok{//<--以下是错误listenerT.EnterSourceUnit(s)}

会有什么问题?

共有1个答案

厍浩广
2023-03-14

我遇到了同样的问题。原因是go找不到接口定义,只要运行go get github.com/antlr/antlr4/runtime/go/antlr就可以解决这个问题。

 类似资料:
  • 类型断言(Type Assertion)是一个使用在接口值上的操作,用于检查接口类型变量所持有的值是否实现了期望的接口或者具体的类型。 在Go语言中类型断言的语法格式如下: value, ok := x.(T) 其中,x 表示一个接口的类型,T 表示一个具体的类型(也可为接口类型)。 该断言表达式会返回 x 的值(也就是 value)和一个布尔值(也就是 ok),可根据该布尔值判断 x 是否为 T

  • 问题内容: 我正在阅读《 Go编程语言》中的类型断言,但不理解它们。 我了解有不同的方案: T是具体类型或接口 可以返回一个(确定值?)或两个(确定)值 这是我不明白的: 我为什么要使用它们? 他们到底返回什么? 我也用谷歌搜索这个话题,但仍然不明白。 问题答案: 一行: 断言这不是nil并且存储的值是type 。 我为什么要使用它们: 检查为零 检查它是否可转换(断言)为另一种类型 转换(断言)

  • 嘿,当我运行应用程序时,它会给出一个错误java.lang.IllegalArgumentException:Invalid listener:null,这说明侦听器是空的。我是初学者,所以请大家帮忙解决这个问题。在这一行中出现错误:LocationManager.RequestLocationUpdates(provider,2000,0,locationListener);//这里是我的示例代

  • 我使用Antlr4和C#Target。在我的语法中有一个简单的lexer规则如下

  • 7.10. 类型断言 类型断言是一个使用在接口值上的操作。语法上它看起来像x.(T)被称为断言类型,这里x表示一个接口的类型和T表示一个类型。一个类型断言检查它操作对象的动态类型是否和断言的类型匹配。 这里有两种可能。第一种,如果断言的类型T是一个具体类型,然后类型断言检查x的动态类型是否和T相同。如果这个检查成功了,类型断言的结果是x的动态值,当然它的类型是T。换句话说,具体类型的类型断言从它的

  • 问题内容: 我是Go编程语言的新手,我有一个创建和解释器的任务,但是我遇到了以下问题: 我想将环境定义为: 但是我收到错误“无效的递归类型环境”。根据我的研究,我将父级更改为 Environment。但是现在,当我需要创建一个环境类型为var的新环境时,它会收到错误消息“无法将fun_Val.ds(环境类型)用作 环境值类型”。我正在如下创建环境: 我试图将这篇文章中的代码量限制在一定范围内,但是