2012-04-03 3 views
1

나는 렉서 생성기를 작성하는 방법에 대해 생각하고있다. 나는 문법으로부터 언어의 키워드를 식별하는 간단한 방법을 생각할 수 없다. 분명히 모든 키워드는 터미널이지만 모든 터미널이 키워드는 아니다. 예를 들어, 다음의 간단한 문법에서 : truth_value -> 'true'| '그릇된'; 자릿수 -> '0'.. '9'; 'true'와 'false'는 키워드이지만 '0', '1'등은 키워드가 아닙니다.렉서 생성기는 문법의 키워드를 어떻게 식별합니까?

도움을 주시면 감사하겠습니다.

답변

1

대부분의 렉서 제너레이터는 프로그래머가 핵심 단어 (및 다른 터미널)를 식별하기 위해 정규 표현식 (또는 이와 유사한 코드)을 작성해야합니다. 나는 공식적인 문법에서 시작하려고 시도한 것을 들어 본 적이 없으며 키워드 자체를 알아 낸다.

예를 들어, 여기에 내가 몇 년 전에 쓴 계산기에 대한 .l 파일 (렉스/플렉스) 입력 파일의 일부 :

sqrt { return SQRT; } 
lg  { return LN2; } 
log  { return LOG; } 
sin  { return SIN; } 
cos  { return COS; } 
tan  { return TAN; } 
pi  { return PI; } 
exit { return EXIT; } 
prec { return PREC; } 
print { return PRINT; } 
\?  { return PRINT; } 
[ \t] { ; } 

[-+*/=()^] { return yytext[0]; } 
\n   { lineno++; return yytext[0]; } 
+0

당신 말은 명시 적으로 일부 재 작성에 사용 된 한 경우에도 키워드를 선언 어쨌든 규칙? –

+0

@prophet_on_that : 올바르게 이해하면 예. 편집 된 답변의 샘플을 참조하십시오. –

+0

감사합니다. –

관련 문제