정규식이 일치하지 않을 때 주어진 문자열에서 색인 위치를 추출 할 수 있는지 궁금합니다. 내 정규식은 "ABC는"이었고, 나는 "ABD"와 일치하려고하면일치하는 문자열에서 일치하는 문자열의 정규 표현식 색인
예를 들어, 경기는 인덱스에 설명 2.
편집을 실패합니다. 내가 필요한 이유는 내 응용 프로그램의 구문 분석 구성 요소를 단순화 할 수있게하기 위해서입니다. 이 응용 프로그램은 Assmebly 언어 교육 도구로서 학생들이 프로그램과 같은 어셈블리를 작성, 컴파일 및 실행하도록합니다.
현재 정규식을 사용하여 입력 문자열을 토큰으로 변환하는 tokenizer 클래스가 있습니다. 이것은 아주 잘 작동합니다. 예를 들면 :
다음 토큰은 다음과 같은 입력 = "INP : X :"주어진 생산하는 것 토큰 화 :
Token.OPCODE, Token.WHITESPACE, Token.LABEL, Token.EOL
는이 토큰 그들은 주어진 문장의 문법을 준수하기 위해 분석
을 . 현재 이것은 IF 문을 사용하여 수행되며 성가신 증명입니다. 이 방법의 단점은 자세한 오류 메시지를 제공 할 수 있다는 것입니다. I.E
if(token[2] != Token.LABEL) { throw new SyntaxError("Expected label");}
성가신 IF 문 대신 정규식을 사용하여 구문을 정의하고 싶습니다. 그러나 이렇게함으로써 상세한 오류 보고서를 반환 할 능력을 잃게됩니다. 따라서 적어도 오류가 발생한 곳을 사용자에게 알리고 싶습니다.
는 내가 알고 싶네 도움이되기를 바랍니다. 컴파일러에 대한 코드를 본 적이 없기 때문에 오류 메시지를 생성하는 코드는 종종 사용자가 수행하는 것처럼 보입니다. – harpo
결국 나는 IF 진술을 계속하기로 결정했습니다. 그러나, 파생 된 Statement 클래스에서 실제 IF 문을 제거하고 대신 IF 검사/예외 예외를 수행 한 기본 Statement 클래스에 CheckSyntax() 메서드를 넣습니다. 이로 인해 많은 코드 중복을 제거 할 수있었습니다. –