正規表現に明示的な連接演算子を追加する
. を連接の演算子として利用した後置表現
中置から後置への変換を行うために、もとの正規表現の連接部分に中置の.を追加したい やることは簡単で、リテラルが2文字続いたら間に.を挟むだけ
ちなみに、入力でメタ文字として扱うのは (, ), |, ?, * ,(.)だけ
code:rs
// トークン列を受け取り、連接の演算子として明示的に.を利用するトークン列を返す
// e.g. abc|aa => a.b.c|a.a
pub fn regex_to_infix(tokens: &Vec<char>) -> Vec<char> {
let mut v = Vec::new();
let mut literal_is_detected = false;
for t in tokens.iter() {
match t {
c @ ('(' | ')' | '|' | '?' | '+' | '*') => {
v.push(*c);
literal_is_detected = false;
}
c @ _ => {
if literal_is_detected {
v.push('.');
}
v.push(*c);
literal_is_detected = true;
}
}
}
v
}