2012-08-09 1 views
1

나는 유닉스 서술문이 여러 개인 문자열이 (,), ||, &&, |과 결합되어있다. 나는 그들을 unix 명령 행에서 평가 될 순서대로 배열 (중첩?)으로 분리하고 싶다. 나는 접두어 표기법으로 그것들을 원하지만 바람직하지 않습니다.유닉스 서술문을`(,), ||, &&, | '로 구분한다.

처럼
a --foo "b|a||r" && a -b || (a || a) | c | d 

["|", ["|", ["||", ["&&", "a --foo \"b|a||r\"", "a -b"], ["||", "a", "a"]], "c"], "d"] 

(정말 모든 가능성을 포함 예를 주려고 노력이 될 것이다. 나는이 접근 방법

?

이해 할 수 있습니다 인기있는 상위 수준 언어 (루비, 파이썬, 등), 또는 심지어 의사 코드가 도움이 될 것입니다.

답변

0

생각해 보면 작업은 수학적 표현을 구문 분석하는 것과 다르지 않습니다. a * (b + c)/d ==>[/, [*, a, [+, b, c]], d] 따라서 동일한 도구를 사용할 수 있습니다.

중위 해석기이 필요합니다. (당신의 운영자가 사이의 피연산자 때문에 중위 : 예 a && b)

찾아보기 Wikipedia article 이상이 이론적 배경의 조금, 당신이 사용하고자하는 언어에 대한 기존 파서를 잡아 연산자와 우선 순위를 정의 할 수 있습니다.

+0

나는'cat "a && b"|를 구문 분석 할 수 없을 것이라고 생각합니다. 에코'제대로? – user1527166

+0

@ user1527166 : 문자열을 단순한 단위로 나눌 때 * 토큰 화 * 단계에서 처리해야합니다.'''사이의 내용은 완전히 문자열로 토큰 화되어야합니다 . – Heinzi

+0

음, 한번 더 시도해보십시오. ,'cat "을 \"b \ ""''(즉, \ "는 문자열을 끝내지 않고 따옴표를 이스케이프 처리합니다) 처리 할 수 ​​있습니까? – user1527166