跳过没有写入语法的输入

时间:2013-07-05 05:56:27

标签: antlr antlr3 abstract-syntax-tree antlr4

我编写了语法来解析以下代码段中的'interface'块(一个块以!\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将是新的。

1 个答案:

答案 0 :(得分:1)

您可以像使用多行注释一样执行此操作。当您遇到块启动时,您不感兴趣跳过任何后续令牌,直到您看到新的块启动。做下一次检查等等。为了在解析器而不是词法分析器中使用此循环,您仍然需要为任何输入标记设置词法分析器标记,否则词法分析器会抱怨。多行注释通常被写为词法分析器规则,所以如果你想这样做,就会出现问题,你必须在lexer级别定义“有趣”的块,这对于它来说真的不合适。