1

我已经编写了语法来解析以下代码段中的“接口”块(块以 为界!\n)。

!
interface FastEthernet 1/0
    no ip address
    shutdown
!
ip route 0.0.0.0
!
router bgp 10
    <skipped...>
!
router ospf 1
    <skipped...>
!
interface Vlan 100
    ip address 192.168.20.1
    no shutdown
!

我没有为“ip route”或“router bgp”或“router ospf”块编写语法,但它(和类似的块)容易出现在输入中。我该如何跳过“不需要的”并只处理“预期的”块?我是 ANTLR 的新手,但在过去的几周里已经学会了为类似的东西编写语法。我从 ANTLRv3.5 开始,v4 将是新的。

4

1 回答 1

1

您可以像使用多行注释一样执行此操作。当你遇到一个你不感兴趣的块开始时,跳过任何后续标记,直到你看到一个新的块开始。做下一次检查等等。为了在解析器而不是词法分析器中有这个循环,您仍然需要为任何输入标记提供词法分析器标记,否则词法分析器会抱怨。然而,多行注释通常被写为词法分析器规则,所以如果你想类似地这样做,那么问题是你必须在词法分析器级别定义“有趣”的块,这真的不适合这样做。

于 2013-07-05T07:38:29.013 回答