2012-06-13 2 views
4

저희 회사는 Android 용 소프트웨어를 작성하려고합니다. 우리는 Java로 작업하고 싶습니다. 회사 소프트웨어의 구성 요소 중 C++이므로 이식해야합니다 (또는 최소한 NDK를 사용하기 전에 시도해야 할 포트가 필요합니다). 이 코드는 Accent을 사용하여 만들어졌으며 문법 문법을 정의합니다. 내가 말할 수있는 것처럼, 원래의 작가 (현재 사라짐)는 문법을 지정하는 방법을 지정하는 문법을 작성한 다음 그 문법과 악센트로 컴파일러 컴파일러를 컴파일했습니다. 컴파일러 - 컴파일러는 지정된 형식의 문법을 사용하고 해당 문법에 맞는 문자열을 파싱하는 바이너리 코드를 생성합니다. 다음은 문법의 예를 조각입니다 :Java 용 문법 컴파일러 컴파일

//include rules from from this file (such as <alpha>) 
include "alphabet.bnf" 

<<topSymbol>> = <alpha> <alpha> <alpha>? .//two letters with an optional third 
//square brackets enclose an XML statement clarifying semantics of the rule 
[ 
    <topSymbol> 
     <letter> 
         <command val="doSomethingToLetter"/> 
     </letter> 
     <!--etc.--> 
    </topSymbol> 
] 

내 질문은 ANTLR 또는 다른 도구를 사용하여, 자바와 함께이 작업을 수행하는 방법이다. 컴파일러 컴파일러 컴파일러는 다소 복잡해 보입니다. 또는 문법 및 의미 론적 XML 정보가 포함 된이 유형의 문법을 쉽게 컴파일/파싱하는 방법을 알고 싶습니다.

+1

컴파일러 컴파일러 컴파일러가 필요한 경우 잘못된 작업을 수행하고 있습니다. –

+4

문법 문법. 컴파일러 - 컴파일러 - 컴파일러. IT 랩? – maksimov

+8

어, 네가 언어를 쓰는 걸 좋아한다고 들었어. 네 문법에 대한 문법을 ​​만들어 문법 분석 방법을 파싱 할 수있어. –

답변

1

제 질문은 Antlr 또는 다른 도구를 사용하여 Java로이를 수행하는 방법입니다. 컴파일러 컴파일러 컴파일러는 다소 복잡해 보입니다.

너무 복잡해 보입니다.

또는 문법 및 의미 론적 XML 정보가 포함 된이 유형의 문법을 쉽게 컴파일/파싱하는 방법을 알고 싶습니다.

아니요 ... 이에 대한 쉬운 대답은 없습니다. 전직 동료가 복잡성의 최전선에 서있는 것처럼 들립니다. 당신은해야 할 것 같습니다

  • 을하거나 자신의 코드가 무엇을 주위에 당신의 머리를 얻고, 그것을 어떻게하는지, ANTLR 작동 방법, 손 번역,
  • 또는 자신의 코드와 디자인 도랑과를 찾아 그것이하는 일을하는 더 간단한 방법.

행운을 빈다.


(사실, 좋은이 보인다 ... 당신이 주위에 당신의 머리를 일단 코드가 복잡하지 않는 한 그 기회 및 컴파일러 - 컴파일러 기술이 있습니다.)

+0

당신이 물어 본 것을 성공적으로 구현했다면,이 대답에 동의합니다. 다음 개발자가 떠났을 때 다음 개발자를 생각해보십시오. –

+0

"다음 개발자를 생각해보십시오."그러나 회사의 비즈니스 목표에 따라 정의 된대로 자신의 직무를 수행 할 능력이 있다는 전제 하에서 만. 다음 개발자가 교육을 잘받지 못해서 혹독한 해킹을 선택했다면 조직에서 취약한 기술 인력을 고용하기로 결정했기 때문에 그렇게해라. 그렇지 않으면 잘 할 수 있다고 믿는다. . 귀사가 우수한 인재를 고용 한 경우 적합한 솔루션을 선택하십시오. –

1

가장 좋은 방법 당신이 가지고있는 문법을 ANTLR이나 Java CC 또는 다른 도구로 번역하는 것입니다.

또 다른 가능성은 JNI를 사용하여 C++ 코드를 호출하는 것입니다.하지만 이는 위험을 초래할 수 있습니다.

저는 도움이 될만한 어떤 것도 알지 못합니다. 삽을 들고 파기 시작하면됩니다.

+2

(삽 대신에 스파게티 포크를 권합니다 :-) –

3

원래 설계자가 자신이 수행 한 작업을 알고 보증 할 수 있으면 해당 개념을 보존하려고합니다. 다른 파서 생성기 (또는 적어도 어떤 종류의 구문 분석 체계)를 사용하는 것이 올바른 접근법입니다. JavaCC 나 ANTLR은 파서 생성기로서 좋을 것이다. 문법을 직접 번역해야합니다. 문법이 충분히 간단하면 hand code a recursive descent parser이 될 수 있습니다.

원래 설계자가 단순히 정상에 오르면 아마도 문법 중심의 측면을 대체 할 수는 있지만 실제로 달성 한 내용을 이해하지 않으면이를 수행 할 수 없습니다.이 사실이 "나에게 다소 복잡해 보인다"는 사실은 당신이 파싱/파서 생성기 기술을 실제로 이해하지 못한다는 것을 암시하며, 당신이 이해하지 못하는 것을 보존하는 것보다 당신이 이해할 수있는 일을하고자하는 욕구에 이끌립니다. 그러나 당신이 그것을 이해하지 못하기 때문에 잘 설계/구현 된 것을 찢어 버리는 것은 나쁜 생각입니다. 이러한 기술에 대해 자세히 알아보고 에게이 이런 방식으로 구현 된 이유를 묻는 것이 좋습니다. 궁극적으로 당신은 옳을지도 모르며, 그의 접근 방식을 다른 것으로 바꿔야하지만, 두려움이 아니라 지식에 기반 해 선택을하십시오.