토크나이저
면접 대비시간 제한1초메모리 제한1024 MB
셸 명령줄을 <, >, &&, ||, (, ), 공백에서 나눈 뒤 공백이 아닌 토큰을 한 칸씩 띄워 출력합니다.
문제
주원이는 시스템과 상호 작용할 수 있는 텍스트 인터페이스를 제공하는 셸을 만들고 있습니다. 셸은 명령문을 입력받으면 tokenizer, lexer, parser, expander, executor 순서로 호출해 명령문을 해석하고, 유효한 프로그램을 실행합니다. 주원이는 셸을 만들기 위해 먼저 아래 구분자로 명령문을 자르는 토크나이저를 개발해야 합니다. 지금까지 문자열을 공백으로만 나누어 왔던 주원이는 여러 구분자로 명령문을 자르는 일이 어렵다고 느끼고 있습니다. 토크나이저 만드는 일을 도와주세요.
토크나이저는 다음 방식으로 동작합니다.
- 문자열을 앞에서부터 읽습니다.
- 구분자를 만나면 구분자의 앞뒤를 자릅니다. 그다음 구분자 바로 뒤 위치부터 다시 읽습니다. 이렇게 잘린 문자열을 토큰이라고 합니다.
- 문자열의 끝에 도달하면 앞에서부터 토큰들을 공백 하나로 구분하여 출력합니다. 토큰이 공백 하나뿐이면 출력하지 않습니다.
문자열 S를 grep skku <infile> outfile이라고 합시다. S를 문자 :을 기준으로 토큰화하면 다음과 같습니다.
grep: :skku: : : :<:infile:>: :outfile
공백 하나로만 이루어진 토큰을 제외하고, 나머지 토큰을 순서대로 공백 하나로 구분하여 출력하세요. 이 S의 출력은 grep skku < infile > outfile입니다.
입력
첫째 줄에 셸 명령문 S가 주어집니다. 명령문은 구분자, 알파벳 대소문자, 숫자, 그리고 $, ?, +, _로 이루어져 있습니다. &나 |가 홀수 번 연속으로 나오는 경우는 주어지지 않습니다.
출력
명령문 S를 구분자 기준으로 토큰화한 뒤, 공백 하나로만 이루어진 토큰을 제외한 토큰들을 공백 하나로 구분하여 출력하세요.