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