다음과 같은 간단한 문법 문법을 사용하면 구문 분석 결과 파서는 회문이 아닌 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
아 물론! ANTLR은 시작 기호를 2 가지가 아닌 1 가지 방법으로 지정하게합니다. 나는 과거의 한밤중을 생각하려고 노력하면 안된다. 감사! –
글쎄, 아직도, 나는 올바른 행동을하지 못하고 내가 뭘 잘못했는지 알 수 없다. 아마도 내가 할 수없는 사소한 오류일지도 모르는 것에 시간 낭비를하는 것에 대해 사과드립니다. –
'test1.g4 '에서'start' 규칙의 이름을'palindrome'으로 바꾸십시오. 이름은 오해의 소지가 있으며 스크립트가 실제로 잘못된 규칙에서 시작하지 않도록합니다. –