0

我正在开发一个将一种语言转换为另一种语言的项目,并且正在使用 GOLD Parser。我需要能够在我的转换中包含评论,因为我们不想失去这些。问题是 CommentLine 和 CommentBlock 被视为噪音并被捕获并丢弃。是否有一种简单的方法可以关闭此行为,以便在阅读评论时将其发送到树的其余部分,以便我可以像对待任何其他语句一样对待它?

如果没有,有人可以帮助我将 CommentLine 转换为规则,在解析时将被视为任何其他语句?我正在使用 GOLD Parser 网站上的 VBScript 语法:

! Special comment definition
Comment Line   =    ''

在这一点上,我唯一的其他选择是当我的引擎读取注释标记时,获取原始数据和源行号,并将其放入字典中,然后我可以在处理其他标记时引用它。这是可行的,但可能会变得混乱。

4

1 回答 1

2

自 5.0 以来,Gold Parser 改变了它处理共享一个结束终端的多个组的方式。这会导致您使用的定义不起作用(我假设您刚刚删除了 Rem 部分以便构建语法?)

自 5.0 以来有两个主要变化:

  • 词汇组
  • 可以更改组和终端属性

由于将使用已定义的换行符,因此如果需要换行符,将自动声明换行符。(如评论)。

Comment+X 将自动归类为“噪声”,并在解析时将其删除,为了避免将注释定义为噪声,您需要明确告诉它它是解析器逻辑必不可少的东西。

此外,您使用的代码只找到了注释开头但没有做任何事情,为了在找到 ' 符号后“捕获”任何内容,我们需要声明我们正在寻找的内容。您可以通过以下方式完成此操作:

! Special Whitespace definition ( All Whitespace's excluding new-lines )
{WS} = {Whitespace} - {CR} - {LF} 

! Special Comment Line definition ( All words,special White-spaces and defined symbols until a Line Break is found ) 
Comment Line = ''({Alphanumeric} | {WS} | [.,-+="] )*{All Newline}  
Rem Line = rem

Comment Line @= {type= Content}
Rem @= {type = Content }

这样,两者都被声明为两个基于行的组(注释行和 Rem 行),我们将两者都定义为 Content 类型,导致两者都被视为 Content 而不是默认的噪音。(因此不应被解析器删除)。

希望这有助于进一步阅读:

http://goldparser.org/doc/grammars/define-groups.htm

http://goldparser.org/doc/grammars/group-attributes.htm

http://goldparser.org/doc/grammars/example-group.htm

于 2015-02-17T11:09:28.430 回答