2012-04-09 6 views
0

ディレクトリへのパスを含む文字列を解析する必要があります。問題は、エスケープされた空白やその他のエスケープ記号が含まれていることです。例:treetopを使って空白とエスケープ記号を含むディレクトリパスを解析する方法は?

P\&G/の前に空白があることに注意してください。ここで

は私の梢文法は、私は、この文字列を解析した後nilを取得

rule alpha_digit_special 
    [ a-zA-Z0-9.+&\\] 
end 

rule path_without_quotes 
    ([/] alpha_digit_special*)+ 
end 

rule quot_mark 
    ["] 
end 

rule path_with_quotes 
    quot_mark path_without_quotes quot_mark 
end 

rule path 
    path_with_quotes/path_without_quotes 
end 

(alpha_digit_specialが最初に空白が含まれている)です。では、文字列にエスケープされた空白が含まれるようにルールを指定するにはどうすればよいですか?

+0

遅れているのですが...パスを解析しようとしていますか?あなたは ''/''に基づいてそれらを分割しようとしていますか?あなたが望む最終結果は何ですか? –

答えて

0

\sを試しましたか?

+0

はい。私はすでにこれを試しました。問題は、構文ノードが正しく見つからないということです。ルールは余分な空白を取り込みます – RomanKapitonov

1

alpha_digit_special *を使用して、バックスラッシュのエスケープスペースを処理することはできません。 代わりに、文字単位の繰り返しを使用する必要があります。文字単位は、バックスラッシュの文字ペアまたはバックスラッシュ以外の単一の文字のいずれかです。このような何か作業をする必要があります:上記は、バックスラッシュ文字(つまり、スペースもalpha_digit_specialセットではありません)を受け入れないことを

rule alpha_digit_special 
    [a-zA-Z0-9.+&\\] 
end 

rule path_character 
    '\\' (alpha_digit_special/' ') 
/
    alpha_digit_special 
end 

rule path_without_quotes 
    ([/] path_character*)+ 
end 

注意を。私はあなたがそれを変更する方法を見ることができると思う。

関連する問題