2012-12-21 5 views
0

JFlex 입력 파일의 어휘 규칙을 다루는 섹션에서 키워드와 정규식을 모두 사용할 수있게 해주는 요점은 무엇입니까?JFlex regex와 어휘 규칙의 키워드

은 첫 번째 정규식과 키워드 인 두 번째 인, "검색"를 포함하는 입력과 일치 모두

retrieve { action code} 

... 그리고

"retrieve" { action code } 

을 ... 보인다. 나는 모든 키워드가 정규식의 형태로 해석 될 수 있어야 함을 의미하므로 양쪽 모두를 허용하는 것은 불필요한 것처럼 보인다.

+0

lex/flex/jflex에는 키워드가 없습니다. 모든 것은 정규식을 통해 수행됩니다. – EJP

답변

1

"키워드"가 무슨 뜻인지 잘 모르겠습니다. the "Lexical rules" section of the JFlex User's Manual에 따르면 모두은 정규식을 사용합니다.

그것은 정규 표현식에 retrieve"retrieve"이 동일하다는 것을 사실이지만 그게 "..." 표기의 유일한 효과는, 정규식 메타 문자를 사용하지 않도록하는 것입니다 이유만으로이고 retrieve의 문자 중 어느 것도 시작하는 정규 표현식 메타 문자 없다. (그건 그렇고, 당신은 또한 단지 일부 인용 부호로 정규식의을 포장 할 수 있습니다. 예를 들어, retriever"et"ri"ev"e에 해당하므로)

따옴표

더 유용한 경우 (예를 들어) 중 하나 귀하의 언어로 된 키워드는 +++***+++이며,이 경우 다음 중 하나를 쓸 수 있습니다.

\+\+\+\*\*\*\+\+\+ { action code } 
"+++***+++" { action code } 
+0

아하 ... 그럼 나는 오해했다. "..."를 사용하여 정규 표현식에서 일반적으로 사용되는 컨벤션이나이 특정 상황에서만 사용되는 메타 문자를 피할 수 있습니까? 나는 "regexes에서 특별한 의미를 갖는 캐릭터로 간주되지 않았기 때문에 실제와 일치 할 것"이라고 생각했다. (따라서 "검색"은 "검색"과 일치하고 정규식으로 검색하지 않기 때문에 정규식이 아니라는 결론을 내릴 수 있습니다. –

+0

@ fast-reflexes : "정규식"은 실제로 단일 개념이 아닙니다. regex 엔진에는 많은 변형이 있습니다. 그래서'''가 정규 표현식에서 특별하지 않다는 것은''floobet' '이 프로그래밍 언어의 예약어는 아니라는 것을 말하는 것과 같습니다. 일반적으로 사실이지만 반드시 범주 적이지는 않습니다. (그러나 확실히, 나는 본 적이 없습니다. * 이런 식으로'''를 사용하는 다른 * 정규 표현식 언어) – ruakh

+0

알았습니다! 고마워요! –