이런 계열 함수들은 (strtok, strtok_r, strsep) 모두 다 원본을 변화시키더군요. memcpy나 strcpy를 한 뒤에 다루는 것이 아무래도 안전하겠죠.
저는 왠지 저것들 중에 strsep을 주로 쓰는 편이네요. FreeBSD의 strtok 매뉴얼의 영향인듯 합니다.
문자열을 파싱하기위한 컴파일러의 원론
컴파일러가 Lex로 Parsing하기위해
Seperator를 문법에서 지정한 문자로 구분
Semantic alnalysis부분에서 의미분석을 통해
구성하는데 이런 패턴을 가지고 펑션이나, 시스템 콜이 운용된다
여기서는 파싱하는 컴파일러 LALR파서가
운용된다는것을 기본전재로 하고 시작해야겟다
우선 파싱하는 방법은 여러가지이다
그것은 알고리즘이 간단할수도 있고, 복잡할수도 있다
Optimization이 된다면 간단해질수있다.
그 알고리즘은 각자가 생각해야겟지만
간단하게 그 제어 루틴 을 알고리즘으로 그려보아야할것이다.
알고리즘 컨트롤 부분이 중요할듯
보인다.
if key words in the string then listen to the following word of that. after that, store and utilize it in another way. process it.
else bite it one by one word.
if no key words then terminate this program.
print some errror message.
스탠다드 함수를 구지 만들어 쓸필요도 없이 사용자가 만들어
써도 무관합니다.
스탠다드 함수는 단순히 Sytem call 이 아닌 Function입니다.
main()함수처럼, 단순히 Function이기에 중요하다고 생각되지
않습니다.
이런 계열 함수들은 (strtok, strtok_r, strsep) 모두 다 원본을 변화시키더군요. memcpy나 strcpy를 한 뒤에 다루는 것이 아무래도 안전하겠죠.
저는 왠지 저것들 중에 strsep을 주로 쓰는 편이네요. FreeBSD의 strtok 매뉴얼의 영향인듯 합니다.
This interface is obsoleted by strsep(3).
소갑수 wrote:
문자열을 파싱하기위한 컴파일러의 원론
컴파일러가 Lex로 Parsing하기위해
Seperator를 문법에서 지정한 문자로 구분
Semantic alnalysis부분에서 의미분석을 통해
구성하는데 이런 패턴을 가지고 펑션이나, 시스템 콜이 운용된다
여기서는 파싱하는 컴파일러 LALR파서가
운용된다는것을 기본전재로 하고 시작해야겟다
우선 파싱하는 방법은 여러가지이다
그것은 알고리즘이 간단할수도 있고, 복잡할수도 있다
Optimization이 된다면 간단해질수있다.
그 알고리즘은 각자가 생각해야겟지만
간단하게 그 제어 루틴 을 알고리즘으로 그려보아야할것이다.
알고리즘 컨트롤 부분이 중요할듯
보인다.
if key words in the string then listen to the following word of that. after that, store and utilize it in another way. process it.
else bite it one by one word.
if no key words then terminate this program.
print some errror message.
스탠다드 함수를 구지 만들어 쓸필요도 없이 사용자가 만들어
써도 무관합니다.
스탠다드 함수는 단순히 Sytem call 이 아닌 Function입니다.
main()함수처럼, 단순히 Function이기에 중요하다고 생각되지
않습니다.
[code:1]/* Copy right by MSDN */#i
이 부분이 간과하기 쉬운 부분입니다. 왜일까요?!~
이유를 아시는 분은 조언 부탁드립니다.
Hello World.
...
저라면 sscanf 를 사용하겠는데.
(사실 저도 모르겠어요.)
Real programmers /* don't */ comment their code.
If it was hard to write, it should be /* hard to */ read.
[quote="오호라"][code:1]char seps[	
그냥 저대로 쓰면 안되고...
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 식으로 써야 되기 때문이 아닌가요 =3=33
strtok 은... 원본 문자열을 변경하기 때문에 사용할때 조심해야 합니다...
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
[quote="정태영"]strtok 은... 원본 문자열을 변경하기
이런 계열 함수들은 (strtok, strtok_r, strsep) 모두 다 원본을 변화시키더군요. memcpy나 strcpy를 한 뒤에 다루는 것이 아무래도 안전하겠죠.
저는 왠지 저것들 중에 strsep을 주로 쓰는 편이네요. FreeBSD의 strtok 매뉴얼의 영향인듯 합니다.
----
Let's shut up and code.
파싱에대한 짧은 소견
문자열을 파싱하기위한 컴파일러의 원론
컴파일러가 Lex로 Parsing하기위해
Seperator를 문법에서 지정한 문자로 구분
Semantic alnalysis부분에서 의미분석을 통해
구성하는데 이런 패턴을 가지고 펑션이나, 시스템 콜이 운용된다
여기서는 파싱하는 컴파일러 LALR파서가
운용된다는것을 기본전재로 하고 시작해야겟다
우선 파싱하는 방법은 여러가지이다
그것은 알고리즘이 간단할수도 있고, 복잡할수도 있다
Optimization이 된다면 간단해질수있다.
그 알고리즘은 각자가 생각해야겟지만
간단하게 그 제어 루틴 을 알고리즘으로 그려보아야할것이다.
알고리즘 컨트롤 부분이 중요할듯
보인다.
if key words in the string then listen to the following word of that. after that, store and utilize it in another way. process it.
else bite it one by one word.
if no key words then terminate this program.
print some errror message.
스탠다드 함수를 구지 만들어 쓸필요도 없이 사용자가 만들어
써도 무관합니다.
스탠다드 함수는 단순히 Sytem call 이 아닌 Function입니다.
main()함수처럼, 단순히 Function이기에 중요하다고 생각되지
않습니다.
Re: 파싱에대한 짧은 소견
소스문자열의 변경, 그러므로 카피해서 써야 한다는 것.
LALR Paser이라...파서까지 넘어갈 필요가 있을꺼요?
Lexical Analysis, Scanner만 있어도 충분하겠죠?!
그냥 Seperator를 기준으로 토큰만 나누면 될텐데... ^^;
그리고, 제가 하고 싶은 말은 좀더 다른 얘기인데...
말해버리면 별거 아니지만...
힌트를 드리자면...언어학입니다...앗...
Hello World.
댓글 달기