为了账号安全,请及时绑定邮箱和手机立即绑定

使用“keys”作为规则元素标签

使用“keys”作为规则元素标签

C#
catspeake 2021-10-24 20:38:11
在我的项目中,我编写了一种用于处理键值对的语言。所以我有一些规则来匹配多个键keysList和一个值valuesList。现在我想在另一个规则中使用它们operationExpression    :    keysList CompareOperator valuesList    ;哪个工作正常。我认为这将是很好命名这些规则元素keys和valuesoperationExpression    :    keys=keysList CompareOperator values=valueList    ;当我现在尝试编译我的项目时,我收到一千个错误,抱怨缺少分号。当我查看生成的代码时,我发现 Antlr 给这些上下文起了奇怪的名字。我期望它们是keys,values但它们似乎是每个 C# 关键字(并且值之间有一些 @s)。public KeysListContext structexterndoushortfloatwhileoperatorrefprotectedreadonlycontinueelsecheckedlockcatchifcasenewusingstaticvoidinsizeofbytedoublesealedfinallythisuncheckedisparamsenumexplicitasnulltruefixedtrydecimalobjectimplicitinternalprivatevirtualboolconststringforinterfaceunsafelongoutswitchdelegateforeachdefaultulonggotopublicstackallocoverrideeventclasstypeofbreakfalsevolatileabstractuintintthrowcharnamespacesbyteshortreturnbase;public ValuesListContext @struct@extern@do@ushort@float@while@operator@ref@protected@readonly@continue@else@checked@lock@catch@if@case@new@using@static@void@in@sizeof@byte@double@sealed@finally@this@unchecked@is@params@enum@explicit@as@null@true@fixed@try@decimal@object@implicit@internal@private@virtual@bool@const@string@for@interface@unsafe@long@out@switch@delegate@foreachkey@ulong@goto@public@stackalloc@override@event@class@typeof@break@false@volatile@abstract@uint@int@throw@char@namespace@sbyte@short@return@base;每个其他名字似乎都很好。为什么 Antlr 这样做,为什么我不允许使用keys和values作为规则元素标签?
查看完整描述

2 回答

?
手掌心

TA贡献1942条经验 获得超3个赞

这是一个错误:问题 1125

似乎在某处有一个地图,其中用户定义的标识符可能与地图中已经存在的某些键(包括keysvalues)发生冲突。

因此,在等待修复错误时,您必须使用不同的名称。


查看完整回答
反对 回复 2021-10-24
?
隔江千里

TA贡献1906条经验 获得超10个赞

我认为这是告诉您使用保留关键字作为标签名称的一种方式。由于您已经发现其他名称可以正常工作,因此请改用不会与您的语言的保留字冲突的名称。


查看完整回答
反对 回复 2021-10-24
  • 2 回答
  • 0 关注
  • 192 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信