【问题标题】:Skipping input for which no grammar is written跳过没有写语法的输入
【发布时间】:2013-07-05 05:56:27
【问题描述】:

我已经编写了语法来解析以下 sn-p 中的“接口”块(一个块以 !\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 将会是新的。

【问题讨论】:

    标签: antlr antlr3 abstract-syntax-tree antlr4


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2015-05-25
      • 1970-01-01
      • 2017-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-22
      • 1970-01-01
      • 2012-08-08
      相关资源
      最近更新 更多