2014-09-19 97 views
0

我正在开发一个项目,将一种语言转换为另一种语言,并使用GOLD Parser。我需要能够将注释纳入我的转换中,因为我们不想丢失这些注释。问题在于CommentLine和CommentBlock被视为噪音并被捕获并丢弃。有没有简单的方法来关闭这种行为,以便读取注释时,它会通过树的其余部分发送,以便我可以像处理其他语句一样对待它?GOLD解析器包括注释

如果不是,有人可以帮助我将CommentLine转换成规则,当分析时将像其他任何语句一样对待?我使用VBScript的语法从GOLD分析器网站:

! Special comment definition 
Comment Line = '' 

在这一点上我唯一的选择是当我的引擎读取评论令牌,取原始数据和源代码行数,并抛出成一个字典,我可以再引用它作为其他标记进行处理。这是可行的,但可能会变得混乱。

+0

注释可以在解析器输入,这往往使跟他们打交道是正确的语言在任何地方出现语法中的元素最多是麻烦的。 – 2014-09-19 15:00:03

回答

2

由于5.0 Gold Parser改变了它的处理方式,它处理多个共享终端的组。这导致您使用到不行的定义(我假设你只是删除了雷姆一部分,所以它会建立语法?)

由于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

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

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