2010-06-22 4 views
9

현재 BNF 문법 (우선 순위 및 연관성이있는 ocamlyacc 파일)에서 스칼라 코드를 생성하는 렉서/파서를 찾고 있습니다. 나는 그것을하는 방법에 거의 아무것도 발견하지 않았기 때문에 나는 아주 혼란 ​​스럽다.BNF 문법에서 스칼라 코드를 생성하는 Lexer/parser

구문 분석을 위해 scala-bison (작업 할 때 많은 문제가 있음)을 발견했습니다. 다른 모든 도구는 스칼라로 가져온 Java 파서 (예 : ANTLR)입니다.

렉싱에 대해서는 아무 것도 발견하지 못했습니다.

는 또한 유명한 파서들이 아주 매력적 경우에도, 그들은 주로 를 역 추적에 시간과 메모리를 많이 소비 (내가 틀렸다면 정정 해줘) 스칼라의 콤비지만, 발견했다.

  • 왜 사람들은 _parser 콤비에 집중하는 것 않습니다

    그래서 나는 두 가지 질문이?
  • 스칼라에서 사용하는 가장 훌륭한 렉서/파서 생성기 제안은 무엇입니까?

답변

7

ScalaBison의 저자 중 한 사람인 저는이 문제에 대해 몇 차례 언급했습니다. :-) 내가 스칼라에서 스캔 할 때 일반적으로 사용하는 것은 JFlex이다. ScalaBison을 사용하면 놀랍도록 잘 작동하며 모든 벤치마킹은 해당 조합을 사용하여 수행되었습니다. 불행한 것은 Java 소스를 생성한다는 것입니다. 따라서 컴파일 작업에는 약간의 체조가 필요합니다. 나는 John Boyland (논문의 주 저자)이 JFlex를위한 스칼라 출력 모드를 개발했다고 믿지만 공개적으로 발표 된 것은 아닌 것 같다.

필자 만의 발전을 위해 스캐너없는 구문 분석 기술로 많은 작업을 해왔습니다. 스칼라 2.8의 packrat 파서 결합자는 아직 일반화되지는 않았지만 꽤 훌륭하다. 나는 파서 결합 자 프레임 워크 내에서 일반화 된 파싱을 구현하는 an experimental library을 구현했다. 그것의 점근선 경계는 전통적인 파서 결합 자보다 훨씬 낫지 만, 실제로는 일정 시간 오버 헤드가 더 깁니다 (나는 여전히 작업 중입니다).

+0

답변과 gll 연결자 주셔서 감사합니다. 어떻게 작동하는지 이해하려고 노력합니다 :) 하지만 JFlex와 Scala를 함께 사용하려고합니다. – Vinz

+1

많은 튜토리얼 (codecommit에 관한 것들을 포함해서) 덕분에 나는 파서 결합자를 가진 간단한 렉서/파서를 마침내 관리했다. – Vinz

3

Scala 2.8에는 packrat 파서가 있습니다. 나는 여기 API 문서에서 인용 :

자료가 많 구문 분석이 무제한 내다 선형 구문 분석 시간을 보장 장점과 구현 되돌아, 재귀 하강 파서위한 기술이다. 이 기술을 사용하면 왼쪽 재귀 문법을 사용할 수도 있습니다.

3

이 질문은 오래된 것이지만 스칼라 코드를 출력하는 렉서 제너레이터를 찾는 사람들에게는 해당 메이븐 및 sbt 플러그인을 포함하여 Java가 아닌 a fork of JFlex that emits Scala으로 작성했습니다. 이제 Maven Central에서 모든 기능을 사용할 수 있습니다.

FACTORIE - 스칼라 here이 포함 된 .flex 파일의 예에서 자연어 처리 pipline의 일부로 영어 텍스트를 토큰 화하기 위해 현재 Maven/sbt 플러그인을 사용하고 있습니다.

+0

좋습니다. 나는 JFlex 1.5 + scale https://github.com/moy/JFlex/releases를 릴리스 했었지만, 당신의 최신 버전이 더 쉽게 찾을 수있을 것 같습니다. –

+0

@ JohnTangBoyland 광산을 쓰기 전에 자신의 버전을 찾았 으면 좋겠다! –

관련 문제