2015-01-05 57 views
0

구조 VHDL은 대소 문자를 구분 것을 대소 문자를 구분하지 않는 Lex 패턴 규칙을 작성하는 방법은 무엇입니까? 내 파일의

`pragma TOKEN1_NAME TOKEN1_VALUE 
`pragma TOKEN2_NAME TOKEN2_VALUE 
`pragma TOKEN3_NAME TOKEN3_VALUE 
`pragma TOKEN4_NAME TOKEN4_VALUE 
TEXT{ 

// A valid VHDL or verilog 
} 
`pragma TOKEN2_NAME TOKEN2_VALUE 
TEXT{ 

    // VHDL or verilog 
} 

내가 Verilog를하고 VHDL.I 모두 취급하고 있기 때문에

마음에 복용하여 내 토큰 이름을 재구성 할 필요가있다. 두 경우 모두 단일 구문 분석기를 사용하고 싶습니다. 가장 효율적인 방법은 무엇일 수 있습니까? 플렉스는 대소 문자를 구분하지 않는 패턴 일치를 허용하는 일종의 기능을 지원합니까? 나중에 파일의 형식이 Verilog 인 경우 토큰 이름이 소문자로 표시되는지 (작은 글자 모두 포함하여) 검사 할 수 있습니까?

(?i:...) 

간의 패턴 :) 경우는 관계없이 스캔 할

+0

하나의 문법으로 두 언어를 처리하는 것이 좋습니다. VHDL과 Verilog를 단일 파일 또는 TextStream에 임베드하려고합니까? – Paebbels

+0

Flex/Lex는 -i 인수와 함께 이것을 지원합니다. 대소 문자를 구별하지 않는 파서를 생성합니다. –

답변

4

플렉스 구문을 사용하여 패턴 내부 케이스 둔감성을 지원한다.

이 아닌 경우은 입력이 "소독"되거나, 소문자로 변환되거나, 어떤 방식 으로든 수정되었음을 의미합니다. 그렇게하고 싶다면 그것은 당신의 책임입니다.

(?i:KeyWord) 

당신이 고대 플렉스 버전이있는 경우 등

(이상 된 2.5.34는 발표, 입력 KEYWORD, keyword, kEywOrd과 일치합니다 : 그것은 의미 모든 (예를 들어)이다 업그레이드하지 않으려는 2007 년 말)와 어떤 이유로, 당신은 다음과 같이 작성 패턴에 익숙해해야합니다 :

[Kk][Ee][Yy][Ww][Oo][Rr][Dd] 

이있는 당신은 여전히 ​​오래된 스캐너 정의 파일의 예를 찾을 수 .

+0

어떤 버전의 플렉스가 이것을 지원합니까? 나는 플렉스 버전 2.5.4에서 기능을 사용할 수 없거나 잘못된 일을하고있을 수 있습니다. 이 올바른 방법 (? i : "begin") {// action}입니까? –

+0

@AnkurGautam : 버전 2.5.34 (2007-12-12 출시)가 필요하지만 20 세 버전에서 7 세 버전으로 업그레이드하는 대신 현재 버전으로 업그레이드하는 것이 좋습니다. 따옴표가 필요하지 않지만 구문은 훌륭합니다.'(? i : begin)'가 잘 작동합니다. – rici