2016-04-01 12 views
0

私はPythonで自分のComputer Scienceクラス用の言語を作成しています。ファイル内の特定の行の読み方を知る必要があります。たとえば、最初の部分に "for"がある場合は、 "()"の中のwhatsを読み、次に "{"をチェックし、次の行に進みます。 "if x in line:"を使ってみましたが、これは正しい順序であることを確認していません。また、最初の3文字や最初の3文字の後の3文字のように、行のどの部分をどうやって取得するのかも分かりません。私は、単一の変数として、またはリストとしての文字にすることなく、これをしようとしています。私は小さな部分を文字列として保存し、行を読み込んだ後にこの部分を別のスクリプトに実装する方が好きです。既存のファイルから行の選択可能な部分を読み込む

+0

あなたは言語パーサを作ることを意味していますか?文字列分割を使って、個々のトークンの文字列のリストを作成してください。 – roadrunner66

+0

ありがとう、私は今これを実装しようとします。できる! – Piguinrulist

答えて

1

正規表現では、分割する前に行の構文をチェックできます。例えば、forループのJavaScript/Cスタイルで:変数for_loop_conditionsで

import re 
if re.match("for([\w|\S]+)[{|\S]", line.strip()): 
    from_first_bracket = line.split("(")[1] 
    for_loop_conditions = from_first_bracket.split(";") 
    # last item in for_loop_conditions list has extra punctuation: 
    for_loop_conditions[2] = for_loop_conditions[2].split(")")[0] 

今格納されている:[ 'X = 1'、」

for(x=1;x<=10;x++){ //Note, some coders drop this { to the next line. 
    do_something(); 
} 

ザPythonのREのようなものがあろうx < = 10 '、' x ++ '] 行は、コーダーが入れ子を示すためにforループの前に置いていた可能性がある先行する空白を取り除くためにストライプされています。私は 'for'と '('または空白を最終リストから除外する)の間の空白を考慮していませんが、次の行に{xを書き、x = x + 2でインクリメントすることを説明しました。

関連する問題