使用"键"作为规则元素标签



在我的项目中,我编写了一种用于处理键值对的语言。因此,我有一些规则来匹配多个关键字keysList和一个值valuesList。现在我想在另一个规则中使用它们

operationExpression
:    keysList CompareOperator valuesList
;

这很好用。

我认为将这些规则元素命名为keysvalues会很好

operationExpression
:    keys=keysList CompareOperator values=valueList
;

当我现在试图编译我的项目时,我会收到一千个错误,抱怨缺少分号。当我查看生成的代码时,我发现Antlr给这些上下文起了奇怪的名字。我原以为它们是keysvalues,但它们似乎是每个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会这样做,为什么不允许我使用keysvalues作为规则元素标签?

这是一个错误:Issue 1125。

似乎在某个映射中,用户定义的标识符可能与映射中已经存在的某些键(包括keysvalues(发生冲突。

因此,在等待bug修复时,您将不得不使用不同的名称。

我认为这是告诉您使用保留关键字作为标签名称的一种方法。正如你已经发现的那样,其他名字也很好用,所以请使用与你的语言保留词不冲突的名字。

相关内容

  • 没有找到相关文章

最新更新