首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自定义记录类型的Firrtl解析器语法错误

自定义记录类型的Firrtl解析器语法错误
EN

Stack Overflow用户
提问于 2018-10-08 06:29:34
回答 1查看 54关注 0票数 2

我有一个表示矩阵的自定义记录类型。包含矩阵条目的Record.elements值使用一个键字符串进行索引,该字符串由行号、下划线和列号组成,即s"${ row }_${col}“。

我还有第二种自定义记录类型,它表示矩阵数组,它们并不都必须是相同大小的(这就是为什么我不能使用Vec)。对于这种类型,Record.elements包含矩阵,并且简单地用int索引,类似于其他数组类型。

某些原因导致Firrtl解析器出现语法错误,如下所示:

代码语言:javascript
复制
line 8:30 no viable alternative at input '_0@[Matrix.scala 53:19]'

这是:

代码语言:javascript
复制
line 376:22 no viable alternative at input 'MatMul_1.io.in.1.3_0'

一些快速搜索似乎表明这个错误是从ANTLR冒出来的,但此时我承认我已经超出了我的深度。

下面是堆栈跟踪,不包括用户代码

代码语言:javascript
复制
Exception in thread "main" firrtl.SyntaxErrorsException: 77 syntax error(s) detected
at firrtl.Parser$$anonfun$1.apply(Parser.scala:45)
at firrtl.Parser$$anonfun$1.apply(Parser.scala:33)
at firrtl.Utils$.time(Utils.scala:182)
at firrtl.Parser$.parseCharStream(Parser.scala:33)
at firrtl.Parser$.parseString(Parser.scala:29)
at firrtl.Driver$$anonfun$getCircuit$1$$anonfun$apply$3$$anonfun$apply$4.apply(Driver.scala:172)
at firrtl.Driver$$anonfun$getCircuit$1$$anonfun$apply$3$$anonfun$apply$4.apply(Driver.scala:172)
at scala.Option.map(Option.scala:146)
at firrtl.Driver$$anonfun$getCircuit$1$$anonfun$apply$3.apply(Driver.scala:172)
at firrtl.Driver$$anonfun$getCircuit$1$$anonfun$apply$3.apply(Driver.scala:172)
at scala.Option.getOrElse(Option.scala:121)
at firrtl.Driver$$anonfun$getCircuit$1.apply(Driver.scala:171)
at firrtl.Driver$$anonfun$getCircuit$1.apply(Driver.scala:160)
at scala.util.Try$.apply(Try.scala:192)
at firrtl.Driver$.getCircuit(Driver.scala:160)
at firrtl.Driver$$anonfun$execute$1.apply(Driver.scala:212)
at firrtl.Driver$$anonfun$execute$1.apply(Driver.scala:209)
at logger.Logger$$anonfun$makeScope$1.apply(Logger.scala:129)
at scala.util.DynamicVariable.withValue(DynamicVariable.scala:58)
at logger.Logger$.makeScope(Logger.scala:127)
at firrtl.Driver$.execute(Driver.scala:209)
at chisel3.Driver$.execute(Driver.scala:182)
at chisel3.Driver$.execute(Driver.scala:202)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-08 16:59:34

经过一些头晕目眩之后,我想出来了: Firrtl语法(和许多其他语法一样)对变量和字段标识符设置了限制:它们不能以数字开头。由于我的自定义记录类型的键都以数字开头,而Chisel将记录键直接用作Firrtl标识符,Firrtl解析器报告了错误。

用于索引自定义Record.elements的键必须是有效的Firrtl标识符(例如,它们不能以数字开头)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52696555

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档