2013-12-16 2 views
2

커스텀 커멘드를 사용해, 커스텀 알파 바이벳에 정규 표현을 매칭하고 싶습니다. 목적은 기상학에서 나타나는 방정식과 표현을 조사하는 것이다.커스텀 정규 표현 파서

예를 들어 내 alpabet은 [p, rho, u, v, w, x, y, z, g, f, phi, t, T, +, -, /] 일 수 있습니다. 참고 : ρ와 Φ는 한글자로 처리해야하는 여러 문자입니다.

변수에 대해 \v과 같은 맞춤 명령을 사용하고 싶습니다 (즉, 연산 연산자가 아닌).

나는 점이 x가 변수입니다 dx/dt을 일치해야합니다 같은 주 (\v). 같은 다른 명령을 사용하고 싶습니다. 마찬가지로, p=p(x,y,z)으로 주어진 경우 은 dp/dx, dp/dydp/dz과 일치하지만 dp/df은 일치하지 않습니다. (어딘가에 p = p(x,y,z)이 주어질 것입니다).

나는 또한 되돌릴 수 있기를 바랍니다.

이제 D와 함께 PCRE와 ragel을 조사했습니다. 처음 두 가지 문제가 해결 될 수 있다는 것을 알았습니다. 여러 문자 객체가 고정 된 객체로 정의되었습니다. 문자 클래스가 아닙니다.

어떻게 세 번째 주소를 지정합니까?

PCRE 또는 RAGEL이 사용자 지정 명령을 사용하는 방법을 허용하지 않습니다. 또한 backtrack을 사용하고 싶기 때문에 Ragel이 올바른 옵션인지 확신 할 수 없습니다.이 wouuld에는 스택이 필요하기 때문에 CFG를 사용하게 될 것입니다.

(즉 중요한 경우 리눅스 64 비트 용) 불가능 아무것도 없다

+0

세 번째 문제는 무엇입니까? 당신이 원하는 것을 혼란스럽게합니다 ... 입력과 예상 결과를 게시 할 수 있습니까? – HamZa

+0

세 번째 prblem : (\ v)와 같은 다른 명령을 사용하고 싶습니다. 점이 dx/dt와 일치해야합니다. 여기서 x는 변수입니다. 유사하게 p = p (x, y, z) 일 때 p '는 dp/dx, dp/dy 및 dp/dz와 일치하지만 dp/df는 일치하지 않는다. (어디 선가 p = p (x, y, z) .so string [] test = [ "dp/df", "dp/dx"]; char [] p_depends = [ 'x', 'y regexmatch (test, "p '", p_depends)는 "dp/dx"를 반환해야합니다. 두 번째 arg에 패턴이 – Sean

답변

1

같은 정규식/CFG 시스템을 구축 할 수있는 domainspeific 언어가 아마도입니다. 정규 표현식을 사용하여 프로그래밍 언어로 새로운 클래스를 작성하고 새로운 구문을 정의하십시오. 그것은 당신의 개인적인 정규식 구문이 될 것입니다. 예를 들어, 같은 :

result = latex_string.match("p'(x,y,z)", "full"); // match dp/dx, dp/dy, dp/dz 
result = latex_string_array.match("p'(x,y,z)", "partial"); // match ∂p/∂x, ∂p/∂y, ∂p/∂z 
. . . 

방법 match는 클래스 내부의 새로운 의사 정규 표현식을 취급하고 바람직한 형태로 결과를 반환합니다. 입력 정의를 문자열 및/또는 배열 형식으로 간단하게 작성할 수 있습니다. 실제로 일부 함수가 모든 파생어와 일치해야하는 경우 검색 표기법을 .match("p'")으로 단순화해야합니다.

하나의 간단한주의 사항 :

latex equation,

소스가 있습니다 \mathrm{d}y=\frac{\mathrm{d}y}{\mathrm{d}t}\mathrm{d}t, 그리고 :

latex equation,

dy=\frac{dy}{dt}dt, 그리고 마지막으로 :

latex equation,

dy=(dy/dt)dt

정규 표현식과 관련된 라텍스 방정식의 일반화 문제는 사람의 입력 요소입니다.그것은 단지 표기법이며 저자는 다양한 입력 매너를 선택할 수 있습니다.

최상의 방법은 수식 콘텐츠를 분석하고 계산을 생성하는 것입니다. 이 경우 미분 또는 파생 상품의 표기법뿐만 아니라 미분 및 파생 상품 계산 지침도 검색되지만 어쨌든 여러 가지 서술 방식으로 수식 문자열의 상세 분석과 연결됩니다.

한 가지 더, 좋은 소식! 마술 정규식 - 라텍스 멀티 바이트 문자 그리스 알파벳을 정의 할 필요는 없습니다. UTF-8은 UI에서 사용할 수있는 ρ - GREEK SMALL LETTER RHO을 가지고 있지만 검색 방법에서는 \rho으로 처리하고 간단히 /\\frac{d\\rho}{dx}/ 정규 표현식을 사용합니다.

하나 더 예 :

enter image description here

// search string 
equation = "dU= \left(\frac{\partial U}{\partial S}\right)_{V,\{N_i\}}dS+ \left(\frac{\partial U}{\partial V}\right)_{S,\{N_i\}}dV+ \sum_i\left(\frac{\partial U}{\partial N_i}\right)_{S,V,\{N_{j \ne i}\}}dN_i"; 
. . . 
// user input by UI 
. . . 
// call method 
equation.equation_match("U'");// example notation for all types of derivatives for all variables 
. . . 
// inside the 'equation_match' method you will use native regex methods 
matches1 = equation.match(/dU/); // dU 
matches2 = equation.match(/\\partial U/); // ∂U 
    etc. 
return(matches);// combination of matches 
+0

인 p를 쓰십시오. 비록 내가 latexexclusively를 찾지는 않았지만, 무엇보다 먼저이 올바른 것을 이해할 수 있습니다 : 일반적인 정규식 기계가 처리 할 수있는 함수를 반환하는 함수로 내 자신의 구문을 마스크해야합니다. – Sean

+1

예, 정확히 주요 아이디어입니다. –