본문 바로가기

Tip

shell에서 문자열 인식

shell에서 문자열을 인식 할 때, 여러가지 경우의 수가 나온다.
quotation mark와 double quotation mark는 쌍으로 존재해야 하고, escape character도 처리해야 한다.

 ls -al a.py
'ls' "-al" a.py
"ls -al a.py"
'ls -al a.py'
"ls" -al a.py
... 


State Transition Diagram과 Grammar로 표현하면 다음과 같다.



Regular Grammar(Right-Linear)를 다시 써 보면,

S -> 'A | "B | \C | λ
A -> bA | \D | 'S
B ->  dB | \E | "S
C -> cS
D -> cA
E -> cB

c = character set
a = c - { \, ', " }
b = c - { \, ' }
d = c - { \, " }


이를 정규표현식으로 바꾸면,

(a+'(b+\c)*'+"(d+\c)*")*


a, b, c, d를 처리하고, 줄의 시작과 끝에 매칭시키려면,

^([^\'"]|'([^\']|\\.)*'|"([^\"]|\\.)*"|\\.)*$

이 식을 가지고, 문자열인지 인식 할 수 있겠다.

근데 진심으로 컴파일러 수업 다시 듣고싶다 ..