3

私の目的は、Python でループ文の開始と終了の行番号を見つけることです。

シナリオ例

#A.py
Line1: a=0                  
Line2: while a<5:           
Line3:    print a          
Line4:    a=a+1 

Desired output:
Start of a loop Line2 
End of a loop   Line4 

現在のパーサー コード

#parser.py
with open(a) as f:
    tree = ast.parse(f.read())
taskline=[]
for node in ast.walk(tree):
    if isinstance(node, (ast.For)) or isinstance(node,(ast.While)):                        
        print node.lineno-1  <-- This give line number on for the start of a loop              

上記の出力を達成したかったのです。AST を使用して特定のファイルを解析し、ループの発生を判断します。AST 解析を使用すると、ループの開始の行番号を見つけることができますが、ループの終了の行番号はまだ決定されていません。ループ ステートメント全体を解析し、その開始行番号と終了行番号を特定する方法はありますか?

4

4 に答える 4

0

複雑になる可能性がありますが、次のアルゴリズムを試すことができます。

1. Count the number of white spaces before while. say it ident(you can use something like this len(a) - len(a.lstrip()) )
2. countinue reading the next line and counting the white spaces before the line say currIdent.
3. when ever currIdent = ident, then end of loop is line before it.
于 2013-07-30T10:46:15.547 に答える