문자열에서 수학기호를 논리 연산식 처럼 바꾸는 게 잘 안 되네요...
글쓴이: qkrskek / 작성시간: 수, 2015/02/11 - 10:59오후
안녕하세요.
수학 기호와 일반 문자열로 구성되어 있는 텍스트 파일이 있는데,
이 파일을 제가 쓰는 Tool 이 인식할 수 있도록
수학 기호를 논리 연산식 처럼 바꾸는 중 입니다.
예를 들면 ( AAA & BBB ) ---> ( AAA AND BBB ) 이런 식입니다.
간단한 것들은 sed 로 하면 되는데, 복잡한 수식이 많아서 힘드네요.
복잡한 수식은 이런 식입니다.
예 : ( AAA + BBB ) + [ { ( CCC + DDD + EEE ) - FFF } & GGG ]
최종답 : ( AAA OR BBB ) OR [ ( ( OR CCC DDD EEE ) NOT FFF ) AND GGG ]
특히, ( CCC + DDD + EEE ) ---> ( OR CCC DDD EEE ) 이 부분은 어떻게 해야 할지 모르겠네요...
그냥 ( CCC OR DDD OR EEE ) 로 하면 Tool 문법 오류로 Fail 납니다.
perl 의 split line 으로 해 볼려고 하는데, 잘 안 되네요.
고수들의 좋은 의견 부탁드립니다.
감사합니다.
Forums:
피연산자가 3개 이상일 때 연산자를 앞에 둬야 하는
피연산자가 3개 이상일 때 연산자를 앞에 둬야 하는 규칙이 있네요.
단순 치환으로는 안 되고 파서를 만들어야 하지 않을까요?
괄호가 중첩되는 형태의 텍스트의 경우 정규식으로 하는
괄호가 중첩되는 형태의 텍스트의 경우 정규식으로 하는 것보다 Text::Balanced 같은 모듈을 쓰라는 게 권장사항입니다만, 구조가 명확한 룰을 따른다면 어떻게든 할 수는 있을 겁니다.
다음과 같이 가정하고,
* 괄호는 중첩되는 경우( [A{B}C] )만 있지 꼬이는 경우( [A{B]C} )는 없음
* 괄호 안에 항이 3개 이상일 때는 사용되는 연산자는 하나 뿐임([A+B+C]만 있지 [A+B-C]는 없음) - 안 그러면 연산자들 우선순위를 생각해야 할 판이라서
* 피연산자 중에 "TERM3" 과 같이 "TERM" + 숫자 로 된 피연산자는 없음 (있다면, 코드를 고쳐서 절대로 나오지 않는 문자열을 쓰시면 됩니다)
일단 본문에 있는 식은 제대로 변환되는 걸 확인했는데, 버그가 있을지도 모르겠네요.
좋은 하루 되세요!
댓글 달기