에 모호한 문법에 과부하 기호로 취급. 하나의 확장자는 예를 들어 확장입니다. 즉 fact(1..3).
은 fact(1). fact(2). fact(3).
으로 확장됩니다. 언어는 INT
및 FLOAT
숫자를 인식하며 종료 자로도 .
을 사용합니다.나는, 문법의 측면에서, 일부 확장과 프롤로그</em><em>과 같은 <em>대답 설정 프로그래밍 (ASP)</em>의 방언에 대한 파서를 작성하는 것을 시도하고있다 ANTLR4
구문 분석기가 정수, 부동 소수점, 확장자 및 구분 기호를 구별하지 못하는 이유는 언어가 명확하지 않기 때문입니다. 이 경우 명시 적으로 토큰을 공백으로 구분해야합니다. 그러나 프롤로그 또는 ASP 파서는 이러한 제작을 올바르게 처리합니다. 나는 그것을 읽었다 ANTLR4는 문제가있는 작품을 자율적으로 모호하게 할 수 있지만 아마도 도움이 필요 하겠지만 어떻게해야할지 모르겠다! ;-) 나는 here과 here과 같은 것을 읽었지만 분명히 그들은 나를 도와주지 않았다.
누군가가이 모호성을 극복하기 위해해야 할 일을 말해 줄 수 있습니까? 언어는 매우 표준적인 언어이므로 변경할 수 없습니다. 전문가의 작업을 단순화하기 위해 필자는 최소한의 작업 예제를 작성했습니다.
grammar Test;
program:
statement* ;
statement: // DOT is the statement terminator
range DOT |
intNum DOT |
floatNum DOT ;
intNum: // not needed, but helps in TestRig
INT;
floatNum: // not needed, but helps in TestRig
FLOAT;
range: // defines an expansion
INT DOTS INT ;
DOTS: '..';
DOT: '.';
FLOAT: DIGIT+ '.' DIGIT* | '.' DIGIT+ ;
INT: DIGIT+ ;
WS: [ \t\r\n]+ -> skip ;
fragment NONZERO : [1-9] ;
fragment DIGIT : [0] | NONZERO ;
나는 다음과 같은 입력 사용 :
1 .
1. .
1.5 .
.5 .
1 .. 5 .
1.
1..
1.5.
.5.
1..5.
을 그리고 다른 도구 대신 수정 구문 분석 다음과 같은 오류를 얻을 :
line 8:0 extraneous input '1.' expecting '.'
line 11:2 extraneous input '.5' expecting '.'
많은 감사를 사전에!
이 언어는 _ 부동 _1로 부동을 허용합니까? 프롤로그는 그렇지 않으며, 이로 인해 언어의 모호성이 상당히 높아집니다. –
@Daniel Lyons Prolog가'1'을 float으로 받아들이지 않는다는 것을 깨닫지 못했습니다 ... 나는 방금 수레에 대한 다소 표준적인 정의를했습니다. 당신의 제안은 다음 프로덕션을 float에 사용하는 것입니다 :'float : DIGIT + '.' DIGIT +; –
나는 그것이 도움이 될 것이고 그것이 상처를 받으면 나는 충격을받을 것이라고 생각한다. –