Presentation is loading. Please wait.

Presentation is loading. Please wait.

For regex_compile function in grep.c

Similar presentations


Presentation on theme: "For regex_compile function in grep.c"— Presentation transcript:

1 For regex_compile function in grep.c
Code Review For regex_compile function in grep.c

2 regex_compile() static reg_errcode_t regex_compile(const char *pattern, int size, reg_syntax_t syntax, struct re_pattern_buffer *bufp) Description : Compiles pattern of length size according to syntax. Input pattern : A pattern (with the form of regular expression) to find from t he input file/string size : the length of pattern syntax : A 18-bit integer, where each bit represents the rule to apply w hen compiling pattern. e.g) Which one between \( \) and ( ) represents the syntactic parenthesis and the literal parenthesis? Output Returns an error code, which is one of the values in enum reg_errcode_t . If pattern is compiled successfully, 0 is returned. Compiled pattern is assigned to bufp->buffer. The size of compiled pattern is assigned to bufp->used.

3 컴파일 된 패턴의 구성 컴파일 된 패턴은 grep의 input 파일 내부에서 매치되는 문자열을 찾기 위해 사용된다.
컴파일 된 패턴은 문자열 매치를 확인하기 위해 수행할 operation과 operation 실행에 필요한 argument의 연속으로 구성된다. Pattern “abc” Compiled pattern exactn 3 a b c operation operation의 arguments (exactn n c1 c2 ... cn : 문자열 상에서 n개의 character c1~cn이 순서대로 매칭되는지 확인)

4 컴파일 된 패턴을 이용한 매칭 방법 – ( 1 / 2 ) 라인 단위로 매칭을 수행한다 파일 내 문자열
라인의 앞 부분부터 op를 순서대로 수행하여, 모두 수행에 성공하면 매치된 것으로 간주. Op 수행에 실패하면 다음 location으로 이동한 뒤, op 를 처음부터 다시 순서대로 수행. 파일 내 문자열 t a b c Op exactn을 수행하였으나, 문자열의 ‘t’와 pattern의 ‘a’가 매칭되지 않으므로 다음 location으로 이동 매칭 시작 지점 Compiled pattern exactn 3 a b c operation operation의 arguments

5 컴파일 된 패턴을 이용한 매칭 방법 – ( 2 / 2 ) 라인 단위로 매칭을 수행한다 파일 내 문자열
라인의 앞 부분부터 op를 순서대로 수행하여, 모두 수행에 성공하면 매치된 것으로 간주. Op 수행에 실패하면 다음 location으로 이동한 뒤, op 를 처음부터 다시 순서대로 수행. 파일 내 문자열 t a b c 문자열과 pattern의 문자 3개가 순서대로 매칭되므로 Op exactn 수행에 성공 매칭 시작 지점 Compiled pattern exactn 3 a b c operation operation의 arguments

6 컴파일 된 패턴을 만드는 예제1 - for pattern “^[abc]” ( 1 / 6 )
begline : 매칭을 시작한 location이 라인의 가장 앞부분인지 확인 charset c1, c2, ..., cn : 문자열의 문자가 c1, c2, ..., cn 중 하나와 매칭되는지 확인 Pattern ^ [ a b c ] Compiled pattern begline

7 컴파일 된 패턴을 만드는 예제1 - for pattern “^[abc]” ( 2 / 6 )
begline : 매칭을 시작한 location이 라인의 가장 앞부분인지 확인 charset c1, c2, ..., cn : 문자열의 문자가 c1, c2, ..., cn 중 하나와 매칭되는지 확인 Pattern ^ [ a b c ] Compiled pattern begline charset

8 컴파일 된 패턴을 만드는 예제1 - for pattern “^[abc]” ( 3 / 6 )
begline : 매칭을 시작한 location이 라인의 가장 앞부분인지 확인 charset c1, c2, ..., cn : 문자열의 문자가 c1, c2, ..., cn 중 하나와 매칭되는지 확인 Pattern ^ [ a b c ] Compiled pattern begline charset a

9 컴파일 된 패턴을 만드는 예제1 - for pattern “^[abc]” ( 4 / 6 )
begline : 매칭을 시작한 location이 라인의 가장 앞부분인지 확인 charset c1, c2, ..., cn : 문자열의 문자가 c1, c2, ..., cn 중 하나와 매칭되는지 확인 Pattern ^ [ a b c ] Compiled pattern begline charset a, b

10 컴파일 된 패턴을 만드는 예제1 - for pattern “^[abc]” ( 5 / 6 )
begline : 매칭을 시작한 location이 라인의 가장 앞부분인지 확인 charset c1, c2, ..., cn : 문자열의 문자가 c1, c2, ..., cn 중 하나와 매칭되는지 확인 Pattern ^ [ a b c ] Compiled pattern begline charset a, b, c

11 컴파일 된 패턴을 만드는 예제1 - for pattern “^[abc]” ( 6 / 6 )
begline : 매칭을 시작한 location이 라인의 가장 앞부분인지 확인 charset c1, c2, ..., cn : 문자열의 문자가 c1, c2, ..., cn 중 하나와 매칭되는지 확인 Pattern ^ [ a b c ] Compiled pattern begline charset a, b, c

12 컴파일 된 패턴을 만드는 예제2 - for pattern “(ab)(c)\1” ( 1 / 9 )
start_memory n : 읽은 문자를 n번 레지스터에 저장하기 시작 Pattern ( a b ) ( c ) \ 1 Compiled pattern start_memory 1

13 컴파일 된 패턴을 만드는 예제2 - for pattern “(ab)(c)\1” ( 2 / 9 )
start_memory n : 읽은 문자를 n번 레지스터에 저장하기 시작 Pattern ( a b ) ( c ) \ 1 Compiled pattern start_memory 1 exactn 1 a

14 컴파일 된 패턴을 만드는 예제2 - for pattern “(ab)(c)\1” ( 3 / 9 )
start_memory n : 읽은 문자를 n번 레지스터에 저장하기 시작 Pattern ( a b ) ( c ) \ 1 Compiled pattern start_memory 1 exactn 2 a b

15 컴파일 된 패턴을 만드는 예제2 - for pattern “(ab)(c)\1” ( 4 / 9 )
start_memory n : 읽은 문자를 n번 레지스터에 저장하기 시작 stop_memory n : n번 레지스터에 저장하던 동작을 중단 Pattern ( a b ) ( c ) \ 1 Compiled pattern start_memory 1 exactn 2 a b stop_memory 1

16 컴파일 된 패턴을 만드는 예제2 - for pattern “(ab)(c)\1” ( 5 / 9 )
start_memory n : 읽은 문자를 n번 레지스터에 저장하기 시작 stop_memory n : n번 레지스터에 저장하던 동작을 중단 Pattern ( a b ) ( c ) \ 1 Compiled pattern start_memory 1 exactn 2 a b stop_memory 1 start_memory 2

17 컴파일 된 패턴을 만드는 예제2 - for pattern “(ab)(c)\1” ( 6 / 9 )
start_memory n : 읽은 문자를 n번 레지스터에 저장하기 시작 stop_memory n : n번 레지스터에 저장하던 동작을 중단 Pattern ( a b ) ( c ) \ 1 Compiled pattern start_memory 1 exactn 2 a b stop_memory 1 start_memory 2 exactn 1 c

18 컴파일 된 패턴을 만드는 예제2 - for pattern “(ab)(c)\1” ( 7 / 9 )
start_memory n : 읽은 문자를 n번 레지스터에 저장하기 시작 stop_memory n : n번 레지스터에 저장하던 동작을 중단 Pattern ( a b ) ( c ) \ 1 Compiled pattern start_memory 1 exactn 2 a b stop_memory 1 start_memory 2 exactn 1 c stop_memory 2

19 컴파일 된 패턴을 만드는 예제2 - for pattern “(ab)(c)\1” ( 8 / 9 )
start_memory n : 읽은 문자를 n번 레지스터에 저장하기 시작 stop_memory n : n번 레지스터에 저장하던 동작을 중단 Pattern ( a b ) ( c ) \ 1 Compiled pattern start_memory 1 exactn 2 a b stop_memory 1 start_memory 2 exactn 1 c stop_memory 2

20 컴파일 된 패턴을 만드는 예제2 - for pattern “(ab)(c)\1” ( 9 / 9 )
start_memory n : 읽은 문자를 n번 레지스터에 저장하기 시작 stop_memory n : n번 레지스터에 저장하던 동작을 중단 duplicate n : n번 레지스터에 저장된 문자열과 매칭 Pattern ( a b ) ( c ) \ 1 Compiled pattern start_memory 1 exactn 2 a b stop_memory 1 start_memory 2 exactn 1 c stop_memory 2 duplicate 1

21 패턴의 컴파일에 실패하는 예제 - for pattern “(ab” (1 / 3)
괄호를 연 뒤 닫지 않아 컴파일 오류가 발생, error 코 드를 리턴 Pattern ( a b Compiled pattern start_memory 1

22 패턴의 컴파일에 실패하는 예제 - for pattern “(ab” (2 / 3)
괄호를 연 뒤 닫지 않아 컴파일 오류가 발생, error 코 드를 리턴 Pattern ( a b Compiled pattern start_memory 1 exactn 1 a

23 패턴의 컴파일에 실패하는 예제 - for pattern “(ab” (3 / 3)
괄호를 연 뒤 닫지 않아 컴파일 오류가 발생, error 코 드를 리턴 Error : Unmatched ( Pattern ( a b Compiled pattern start_memory 1 exactn 2 a b


Download ppt "For regex_compile function in grep.c"

Similar presentations


Ads by Google