2017-09-11 19 views
0

내 문법은 간단한 문법이지만 연결을 만들기 위해 일부 문자열을 허용하고 싶습니다. 이 수식은 유효해야합니다 :ANTLR 문법 : CP1252 유로 문자 이해

CONCATENATE(10;" €") 

유로 기호는 문제입니다. 내가하는 데 사용하지만 내 문법으로,이 정도 기호에 대한 아주 좋은 일하고 :

fragment SPECIAL  : '\u00B0' | '\u20AC' 

I가 발생하고있어이도 기호처럼 작동하지

fragment SPECIAL  : '\u00B0'; 

그러나 유로 기호 ANTLR 3.4 및 생성 된 렉서 코드와 PHP 파서는도 기호에 대해 다음과 같다 :

$this->getToken('176')== $LA26 || ... 

그리고 광고이 유로 기호를 위해, 나는 거기 (수동 파서 생성 후 추가해야하는 경우 그것을 추가하는 2 개의 장소 다), 그것은 일한다!

$this->getToken('128')== $LA26 || ... 

내 질문은 :이 코드 생성을 얻기 위해 문법에 추가하는 방법은 무엇입니까? u00보다 wlse로 시작하는 유니 코드 기호에 문제가 있습니까? 다른 모든 특수 문자가 \ u0000로 시작하기 때문에

나와 함께 보낸 시간 동안 많은 감사를드립니다. 감사합니다. Nicolas.

+0

모든 인코딩을 UTF-8로 인코딩하십시오! – delboy1978uk

+0

트롤링을 중지하십시오, antlr PHP는 utf8을 지원하지 않습니다 –

+0

오! 정말?! 내 친구 한테는 제비 뽑기가 안돼! 이걸 따라 – delboy1978uk

답변

1

파서가 CP1252 입력을 사용하는 경우 유니 코드 코드 포인트로 정의 된 토큰으로 어떻게 작동하는지 어떻게 예상합니까?

입력이 CP1252 인 경우 해당 문자 세트의 코드 포인트를 사용해야합니다. CP1252의 유로 기호는 \u0080을 사용하십시오.

+0

0080을 사용해 보겠습니다. 하지만 유니 코드 포인트 전달 u00B0 학위 또는 숫자 기호 ... 그 이유는 어디서 문제인지 알아낼 수 없습니다 ... –

+1

0xB0는 유니 코드와 CP1252 모두에 대한 학위 용 코드 포인트입니다. 그 이유 일 수 있습니다. –