Pyparsing:没有调用ParseAction

时间:2016-06-29 14:04:40

标签: pyparsing

在一个简单的语法中,我处于糟糕的情况,我的一个ParseActions没有被调用。

对我来说,这很奇怪,因为基本符号(" logic_oper")的parseActions和派生符号(" cmd_line")被正确调用。只是" pa_logic_cmd"不叫。您可以在代码末尾包含的输出中看到这一点。

由于解析输入字符串没有异常,我假设语法(基本上)是正确的。

 <table ng-hide="nextData.isclicked" style="width:100%">
    <tbody>
      <tr ng-repeat="data in datas">

          <td ng-style="getColor(data)">
            <a href="#" ng-click="data.isclicked = true; $parent.nextData = data">{{ data.venture }}
            </a>
          </td>

      </tr>
    </tbody>
  </table>

  <div ng-if="nextData.isclicked" class="data-show">
    <ul>
      <li> {{ nextData.member[0].name }} </li>
      <li> {{ nextData.message }}</li>
    </ul>
    <button ng-click="nextData.isclicked = false; nextData = {};">Back</button>
  </div>
</div>

有人能给我一个关于这个parseAction问题的提示吗? 谢谢,

1 个答案:

答案 0 :(得分:0)

问题在于:

cmd_line = (logic_cmd)
cmd_line.setParseAction(pa_cmd_line)

第一行将cmd_line指定为与logic_cmd相同的表达式。您可以通过添加以下行来验证:

print("???", cmd_line is logic_cmd)

然后第二行调用setParseAction,它会覆盖logic_cmd的解析操作,因此永远不会调用pa_logic_cmd

删除第二行,因为您已经使用pa_logic_cmd测试了对解析操作的调用。您可以更改为使用addParseAction方法,但我认为这是一个无效的测试(向同一个pyparsing表达式对象添加2个解析操作)。

,将cmd_line的定义更改为:

cmd_line = pp.Group(logic_cmd)

现在你将logic_cmd包装在另一个表达式中,然后你可以独立设置和测试两个不同表达式上的解析操作的运行。