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
'programing' 카테고리의 다른 글
렌더링된 vue에서 html 자리 표시자 특성을 이스케이프하는 방법 (0) | 2022.05.26 |
---|---|
C에서 함수 호출 재정의 (0) | 2022.05.26 |
C의 크기가 "int"가 2바이트인가 4바이트인가? (0) | 2022.05.26 |
분할("|")을 사용하여 파이프 기호를 기준으로 Java 문자열 분할 (0) | 2022.05.26 |
TypeError로 인해 Vuex+Jest 테스트가 실패함 (0) | 2022.05.25 |