在一个简单的语法中,我处于糟糕的情况,我的一个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问题的提示吗? 谢谢,
答案 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
包装在另一个表达式中,然后你可以独立设置和测试两个不同表达式上的解析操作的运行。