我正在开发一个项目,将一种语言转换为另一种语言并使用GOLD Parser。我需要能够在我的转化中加入评论,因为我们不想丢失这些评论。问题是CommentLine和CommentBlock被视为噪声并被捕获并丢弃。是否有一种简单的方法可以关闭此行为,以便在读取注释时,通过树的其余部分发送它,以便我可以像对待任何其他语句一样对待它?
如果没有,有人可以帮我将CommentLine转换成一条规则,解析时将被视为任何其他声明吗?我正在使用GOLD Parser网站上的VBScript语法:
! Special comment definition
Comment Line = ''
此时我唯一的另一个选择是当我的引擎读取注释标记时,获取原始数据和源行号,然后将其放入字典中,然后我可以将其引用回处理其他标记。这是可行的,但可能会变得混乱。
答案 0 :(得分:2)
由于5.0 Gold Parser改变了它处理的方式,它处理了共享终端的多个组。这导致您使用的定义不起作用(我假设您刚刚删除了Rem部分,因此它会构建语法?)
自5.0以来,有两个主要变化:
因为将使用这些定义的换行符,如果需要换行符,将自动声明换行符。 (例如评论)。
注释+ 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行) 我们将两者定义为内容类型,导致两者都被视为内容而不是默认的噪音。 (因此不应被解析器删除)。
希望这有助于进一步阅读:
http://goldparser.org/doc/grammars/define-groups.htm