2013-05-27 3 views
2

나는 아주 간단하게 언어를 가지고있다. 함수는 아무것도 다음에, 그리고 "Q"로 끝나는, 함수 이름 (괄호 뒤에 단어) 다음 (세미콜론으로 시작하는 선으로 표시) 의견의 일부 수로 정의됩니다. 다음은 구문 분석-EZ 기능입니다 :언어 구문 분석

(defn routine [] 
(multi* (regex #";.*") 
(regex #"(\w+)\(.*\).*" 1) 
(multi* (regex #"[^q].*")) 
(regex #"q.*")) 

이 작동하지만, 줄 번호에 다른 패턴 일치를 반환합니다. 이 작업을 수행 할 수있는 방법이 있습니까? 아니면 내 파서를 작성해야합니까? 그것이 지금의 약자로서 내 언어가 새로운 파서를 작성하는 것은 너무 많이 중요하지만 복잡성이 증가함에 따라 저를 제한합니다하지 않을 것이라고 간단하다

.

+0

은 새로운 언어를 작성하거나하는 방법을 알아 보려면 목표 파서를 작성 하시겠습니까? 그것이 이전의 경우, 여기에 나열된 여러 라이브러리 중 하나를 사용할 수있는 것보다 http://www.clojure-toolbox.com/. 파서를 작성하는 방법을 * 배우는 것이 목적이라면 그냥 넘어 가지 말아야합니다. – noahlz

+0

@noahz : 파서를 쓰고 싶습니다. 파서를 쓰는 데 관심이 없습니다. 나열된 파서가 줄 번호를 지원하는지 알고 있습니까? 나는 어떤 것도 좋아하지 않았다. – Xodarap

+2

[파슬리 (https://github.com/cgrand/parsley) 및 [instaparse (https://github.com/Engelberg/instaparse) 두 파싱 라이브러리이다. 이들은 모두 생성 문제 ([채소 (https://github.com/Engelberg/instaparse/issues/8), 파슬리 (https://github.com/cgrand/parsley/issues/4)) 요청을 구문 분석 된 결과에 대한 행 및 열 메타 데이터. 내가 사용한이 두 라이브러리 중 단 하나는 ** parsely **입니다. 실제로 파싱 된 결과에 모든 원본 텍스트가 저장되므로 파스 트리를 통해 '\ n'을 찾고 라인을 계산할 수 있습니다 및 각 기호에 대한 열. –

답변

2

구문 분석-EZ에 "라인 POS"기능이 있습니다. 그걸 쓸 수 없니?

라인 볼때 문서는 :

"반환 [온라인 칼럼] 현재 커서 위치 파서의 를 나타내는 벡터"

관련 문제