shell에서 문자열을 인식 할 때, 여러가지 경우의 수가 나온다.
quotation mark와 double quotation mark는 쌍으로 존재해야 하고, escape character도 처리해야 한다.
State Transition Diagram과 Grammar로 표현하면 다음과 같다.
Regular Grammar(Right-Linear)를 다시 써 보면,
이를 정규표현식으로 바꾸면,
a, b, c, d를 처리하고, 줄의 시작과 끝에 매칭시키려면,
이 식을 가지고, 문자열인지 인식 할 수 있겠다.
근데 진심으로 컴파일러 수업 다시 듣고싶다 ..
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를 처리하고, 줄의 시작과 끝에 매칭시키려면,
^([^\'"]|'([^\']|\\.)*'|"([^\"]|\\.)*"|\\.)*$
근데 진심으로 컴파일러 수업 다시 듣고싶다 ..