2013-07-26 3 views
0

다음과 같은 간단한 문법 문법을 사용하면 구문 분석 결과 파서는 회문이 아닌 a와 b의 조합 을 허용하는 것으로 보입니다. [글쎄, 내가 잘못 시작 심볼을 지정했을 때 사실이었다; 지금은 수정하기 위해 수정했지만 여전히 원하는 동작을 얻지 못하므로 정확한 명령을 추가하여 [제안 된 변경 사항 및 결과 문제를 표시하고 다시 수정하여 제안 된 변경 사항 및 그로 인한 문제를 표시합니다.]4.1 ANTLR 문법 문법에 대한 잘못된 입력을 허용합니다.

// test1.g4 

grammar test1; 

palindrome 
    : 'z' entry EOF ; 
entry 
    : 'a' entry 'a' 
    | 'b' entry 'b' 
    | 'a' 
    | 'b' 
    | 
    ; 

WS : [ \t\r\n]+ -> skip ; 

이 정확한 test1.g을 감안할 때, 나는 다음 쉘 스크립트 실행 : 입력에 실행 한 후

#!bash 
# script for running ANTLR tests 
ANTLR4="java -jar /usr/local/lib/antlr-4.1-complete.jar" 
$ANTLR4 test1.g4 
echo "grammar compiled" 
x=/usr/local/lib/antlr-4.1-complete.jar 
javac -classpath $x *.java 2>&1 
echo "parser compiled" 
#java -cp $x:. org.antlr.v4.runtime.misc.TestRig test1 start -tokens -trace -diagnost 
java -cp $x:. org.antlr.v4.runtime.misc.TestRig test1 palindrome -tokens 

을 그리고 "AAB"는 제공 :

aab 
[@0,0:0='a',<2>,1:0] 
[@1,1:1='a',<2>,1:1] 
[@2,2:2='b',<1>,1:2] 
[@3,4:3='<EOF>',<-1>,2:0] 
No method for rule palindrome or it has arguments 

답변

1

내가을 전달하는 경우 그것에, 나는 다음과 같은 출력 얻을 :

라인을 1 : 3 아무 대안없는 입력 'B'

당신이 지금 start 대신 entry로 시작을 이야기하고 확신에 ? entry으로 시작하면 생성 된 코드에는 입력 aab에 대한 구문 오류가 생성되지 않는 코드 흐름 경로가 그대로 포함되지 않습니다. 구문 분석 오류 은 그렇지 않은 경우이 발생합니다. 출력 리스너를 무시하거나 stdout을 볼 수없는 곳으로 파이프를 연결하거나 처리가 끝나면 메시지를 숨길 수 있습니다.

+0

아 물론! ANTLR은 시작 기호를 2 가지가 아닌 1 가지 방법으로 지정하게합니다. 나는 과거의 한밤중을 생각하려고 노력하면 안된다. 감사! –

+0

글쎄, 아직도, 나는 올바른 행동을하지 못하고 내가 뭘 잘못했는지 알 수 없다. 아마도 내가 할 수없는 사소한 오류일지도 모르는 것에 시간 낭비를하는 것에 대해 사과드립니다. –

+0

'test1.g4 '에서'start' 규칙의 이름을'palindrome'으로 바꾸십시오. 이름은 오해의 소지가 있으며 스크립트가 실제로 잘못된 규칙에서 시작하지 않도록합니다. –