2017-02-10 8 views
2

私はプログラミング言語を作成しています。この言語では、Pythonにコンパイルするプログラムを作成しています。レクサーは必要ありません。なぜなら、ほとんどの文法は正規表現でPythonに変換できるからです。Pythonで複数の正規表現

import re 

infile = input() 

output = open(infile + ".py","w") 
input = open(infile + ".hlx") 
# I'm aware the .hlx extension is already taken, but it doesn't really matter. 

for line in input: 
    output.write(re.sub(r'function (\S+) (\S+) =', r'def \1(\2):', line)) 

for line in input: 
    output.write(re.sub(r'print(.+)', r'print(\1)', line)) 

for line in input: 
    output.write(re.sub(r'call (\S+) (\S+)', r'\1(\2)', line)) 

# More regexes go here, eventually. 

input.close() 
output.close() 

私は、私はそれらを一緒に置けば、それは各ラインを3回に代わるため、ステートメントのために別々にそれぞれの正規表現を入れていた:

は、ここで私がこれまで持っているものです。

ここで問題となるのは、最初の正規表現のうちの1つだけを実行することです。順序はここで本当に重要ではありませんが、私はまだすべての正規表現を実行するプログラムが必要です。どうすればいい?ところで

は、ここで私は私の言葉で置き換えたいコードは次のとおりです。

function hello input = 
    print "Hello, ", input, "!" 
hello "world" 

そして、ここでは、私はPythonででそれを置換するコードは次のとおりです。

def hello(input): 
    print("Hello, " + input + "!") 
hello("world") 
+1

開いているファイルを何度も繰り返したい場合は、最初に 'seek()'する必要がありますファイルのまた、各 're.sub'呼び出しの出力を変数に代入して、' re.sub'を呼び出す前に同じ行に呼び出すのはなぜですか? – bunji

答えて

1

は1個のすべての置換を実行します1つのループで、1つずつ繰り返します。

+0

これはうまくいきました。ありがとうございました。 – SyscalineGaming

+0

万が一、特定の順序で正規表現を実行する方法も知っていますか?たとえば、次のようにします。この正規表現を行い、次にこれを行い、次にこれを行います。 – SyscalineGaming

+0

タプルの出現順に適用されます。 – DyZ