2013-10-16 4 views
1

Irony.Net (https://irony.codeplex.com/)으로 작업 중이며 SQL 문법을 사용하고 있습니다. 이제 구문 분석기 및 항목을 올바르게 구문 분석 할 수 있습니다. (필자는 기본 문법에 매개 변수 지원을 추가해야했습니다.)아이러니 리빌드 선언문

이제 제 질문은 간단합니다. ParseTree를 조작 한 후에 ParseTree에 대한 문을 다시 작성하려고합니다.

아이러니하게도 트리에 대해 원래 파싱 된 텍스트를 재구 축할 수있는 방법이 있습니까? 아니면이 시스템을 직접 작성해야합니까?

저는 제 자신의 시스템을 잘 작성하고 있지만, 이미 제자리에 있다면 오히려 그것을 사용하려고합니다.

답변

1

Irony.Net 파서로 작업 한 후 꽤 오랜 시간이 지난 후에 ParseTree를 조작 한 후에 원래 파싱 된 문자열을 다시 작성하기가 어려워졌습니다.

이유는 공백을 보존하지 않고 문장 부호를 할당하면 구문 분석 트리가 자동으로 해당 항목을 제거하기 때문입니다.

이제 구문 분석 트리의 일부는 토큰 \ 용어가 원래 문자열에있는 문자의 "범위"를 제공합니다.

스팬 세부 정보를 지정하면 원래 스톰 마커에서 문자를 제거하여 명령문을 본질적으로 다시 작성할 수 있습니다.

많은 토론 끝에 Irony.Net 프로젝트가 성명을 AST로 구문 분석하는 것이 환상적이지만 프로젝트가 파싱 된 트리를 조작하는 데 적합하지 않음이 발견되었습니다.

우리는 여전히 Irony.Net 프로젝트를 다른 문제에 사용하고 있습니다.

+0

구문 분석 된 정보를 "다시 작성"하는 해결책을 찾으셨습니까? – inselberg

+1

아니요, 우리는 재 작성을위한 해결책을 찾지 못했습니다. 대신 우리는 트리를 사용하여 새 명령문을 다시 작성했습니다. 이것은 우리가 기대했던 것보다 약간 더 시간이 걸렸지 만 Irony.net은 우리가 서명의 관점에서 원했던 것을 우리에게주었습니다. – Nico