小编Ray*_*szt的帖子

pyparsing,forward和recursion

我正在使用pyparsing来解析vcd(值更改转储)文件.本质上,我想读取文件,将其解析为内部字典,并操纵值.

没有详细介绍结构,我的问题发生在识别嵌套类别.

在vcd文件中,您有"范围",其中包括连线和可能更深(嵌套)的范围.把它们想象成水平.

所以在我的文件中,我有:

$scope module toplevel $end
$scope module midlevel $end
$var wire a $end
$var wire b $end
$upscope $end
$var wire c $end
$var wire d $end
$var wire e $end
$scope module extralevel $end
$var wire f $end
$var wire g $end
$upscope $end
$var wire h $end
$var wire i $end
$upscope $end
Run Code Online (Sandbox Code Playgroud)

所以'toplevel'包含所有(a - i),'midlevel'包含(a - b),'extralevel'包含(f - g)等.

这是我解析此部分的代码(代码段):

scope_header = Group(Literal('$scope') + Word(alphas) + Word(alphas) + \
                     Literal('$end'))

wire_map = Group(Literal('$var') + …
Run Code Online (Sandbox Code Playgroud)

python recursion forward pyparsing

9
推荐指数
2
解决办法
3449
查看次数

Makefile规则和If语句 - 如何?

我是Makefiles的新手所以请耐心等待.

我需要修改一个Makefile,这样一些规则会根据变量调用不同的实用程序.

现在,规则看起来像:

ci:
    [shell syntax for tool (A)]
Run Code Online (Sandbox Code Playgroud)

但是现在我需要ci根据变量使用不同的语法.所以我在文件的顶部定义了一个全局变量:

TOOL = toolA
Run Code Online (Sandbox Code Playgroud)

要么

TOOL = toolB
Run Code Online (Sandbox Code Playgroud)

理想情况下我喜欢的是这样的东西,但显然它不起作用:

ifeq ($TOOL, toolA)
    ci:
        [syntax for tool (A)]
else
    ci:
        [syntax for tool (B)
endif
Run Code Online (Sandbox Code Playgroud)

有谁知道正确实现这样的事情的最佳方法?

谢谢!!

编辑:工具语法比一行更复杂.有时它的多行而不仅仅是"toolA args等".对困惑感到抱歉!

unix if-statement makefile tcsh

5
推荐指数
1
解决办法
1万
查看次数

csh stdin到Python stdin?

如何将csh脚本的stdin重定向到python脚本的stdin?

我有一个cgi脚本,我正在用在Solaris机器上运行的csh编写.这个csh脚本是从stdin读取的python脚本的包装器(我知道,在csh中编写脚本很糟糕但在这种情况下我不得不这样做).

感谢帮助!(抱歉n00b问题!)

python stdin csh

2
推荐指数
1
解决办法
282
查看次数

为什么python中的'for'循环会更改未引用的列表?

我正在编写一个py脚本,它从csv文件中读取行,操作它们并将它们放回原处.到目前为止,我有csv列出转换工作.

我遇到的问题是当我遍历临时列表时,for循环会更改所有临时列表,而不仅仅是我想要的那个.这是我想说的一个简单例子.

>>> l = [['hi', 'ho'],['no', 'go']]
>>> t = []
>>> y = []
>>> 
>>> for row in l:
...     row[0] = '123'
...     y.append(row)
...     t.append(row)
... 
>>> y
[['123', 'ho'], ['123', 'go']]
>>> t
[['123', 'ho'], ['123', 'go']]
Run Code Online (Sandbox Code Playgroud)

所以上面的内容很简单(希望如此).(我们假设除了复制列表之外我还想做其他事情.只是想保持简单).

但现在这是我没有得到的部分.

>>> z = []
>>> for row in y:
...     row[0] = 'xxxx'
...     z.append(row)
... 
>>> z
[['xxxx', 'ho'], ['xxxx', 'go']]
>>> t
[['xxxx', 'ho'], ['xxxx', 'go']]
>>> y
[['xxxx', 'ho'], ['xxxx', 'go']]
Run Code Online (Sandbox Code Playgroud)

当我想修改子列表中的第一部分,并将其保存到新列表'z'时,它也会修改列表t! …

python variables scope for-loop list

1
推荐指数
1
解决办法
1884
查看次数