programing

Flex/lex의 문자열 리터럴에 대한 정규식

prostudy 2022. 5. 26. 23:02
반응형

Flex/lex의 문자열 리터럴에 대한 정규식

나는 유연함을 배우기 위해 실험을 하고 있는데 문자열 리터럴을 매칭하고 싶다.현재 내 코드는 다음과 같다.

"\""([^\n\"\\]*(\\[.\n])*)*"\""        {/*matches string-literal*/;}

나는 한 시간 가량 변주곡에 시달려 왔는데 제대로 작동하지 않는다.나는 본질적으로 (탈출되지 않는 한) 새로운 행을 포함할 수 없고 탈출한 문자를 지원하는 문자열 리터럴과 일치하기를 바라고 있다.

나는 아마도 그저 빈약한 정규 표현이나 유연한 표현과 양립할 수 없는 표현을 쓰고 있을 것이다.충고해 주십시요!

문자열은 따옴표로 구성된다.

"

0 또는 그 이상의 탈출이 뒤따른다.

\\.

또는 비백슬래시 문자

[^"\\]

그리고 마침내 끝맺는 인용구

"

모두 종합해 보면, 넌 이미 알고 있는 거야.

\"(\\.|[^"\\])*\"

구분된 따옴표는 Flex 메타차르이기 때문에 이스케이프된다.

한 줄에 대해...다음을 사용할 수 있다.

\"([^\\\"]|\\.)*\"  {/*matches string-literal on a single line*/;}

끈을 유연하게 다루는 내 코드 조각을 붙여라. 네 생각에 영감을 주길 바란다.

문자열 리터럴을 처리하려면 시작 조건을 사용하십시오.

%x SINGLE_STRING

%%

\"                          BEGIN(SINGLE_STRING);
<SINGLE_STRING>{
  \n                        yyerror("the string misses \" to termiate before newline");
  <<EOF>>                   yyerror("the string misses \" to terminate before EOF");
  ([^\\\"]|\\.)*            {/* do your work like save in here */}
  \"                        BEGIN(INITIAL);
  .                         ;
}

템플릿이 포함된 단일 줄 문자열 리터럴에 대해 Zolang에서 사용하는 기능${...}

\"(\$\{.*\}|\\.|[^\"\\])*\"

시작 상태를 사용하는 것은...

intent_dblquotes = 0;
%x DBLQUOTS%%
\" { BEGIN(DBLQUOTS); enter_dBLQUOTS+; }
<DBLQUOTS>*\"{if(입력_dblquotes){handle_this_dblquotes(yytext);BEGIN(초기화); /* 정상으로 되돌림 */enter_dblquotes--;}}...더 많은 규칙이 따른다...

그 효과와 비슷했다(유연한 사용)%s또는%x어떤 상태를 예상할 수 있는지 표시하기 위해서입니다.플렉스 입력이 따옴표를 감지하면 다른 상태로 전환한 다음 다른 따옴표에 도달할 때까지 렉싱 작업을 계속하며, 이 경우 다시 정상 상태로 되돌아간다.

늦게 도착하지만 다음 사용자에게 유용할 수 있는 답변:

\"(([^\"]|\\\")*[^\\])?\"

참조URL: https://stackoverflow.com/questions/2039795/regular-expression-for-a-string-literal-in-flex-lex

반응형