JavaCC에서 "Java에서 작성한"그림 스크립트 "프로그램을위한 구문 분석기 문법을 함께 사용했습니다. 이 프로그램은 일련의 스크립팅 된 명령을 사용하며 대부분 java.awt.Graphics 메서드 호출에 바로 매핑되어 직접 처리되며 이미지를 파일로 출력합니다. 더 복잡한 구조 (예 : 루핑 또는 함수)를 추가하기를 원하기 때문에 JavaCC를 사용하여 파서를 작성합니다.
지금은 AST로 입력을 작성하는 데 JJTree를 사용하고 있습니다. 어쨌든, JavaCC (JJTree는 .jjt 파일에서 OK입니다.) 경고 메시지가 나타납니다.
경고 : 320 번 행의 9 번째 줄에있는 (...) 구성을 선택하십시오. 구문 중 공통적 인 접두어가 하나 있는데 그 중 하나는 "+"
중첩 확장을 위해 2 이상의 미리보기를 사용하는 것을 고려하십시오. * '(I는 별 연산자를 대체 this 건너 않았지만JavaCC : 선택 확장에서 선택 충돌
(
MulTerm()
(//line 320 in the file, column 9 starts at open parens
"+"
MulTerm()
{jjtThis.setName("+");}
|
"-"
MulTerm()
{jjtThis.setName("-");}
)*
)#Plus(>1)
마지막으로, : 소스 문법 "PicParse.jjt"에
때문에, 나는이 해당 파일의 잘못된 구조라고 생각 ')와 물음표 연산자 ('? ')는 경고를 제거하지 못했습니다.
궁극적으로,이 규칙 ("AddTerm()")과 동일하게이 생산 규칙을 사용하여 어느 선택 사항과도 일치하는 연산자를 유지할 수 있습니다. 각 노드를 나타내는 노드 유형 하나만 있으면 더하기와 빼기를 구별 할 수 있습니다.
단 하나의 제안 : 단항 및 PrimaryExpr에서 이름을 전환하십시오. 또한 고정 된 문법에서 -a/b는 - (a/b)가 아닌 (-a)/b로 구문 분석됩니다. 이것은 프로그래밍 언어에서 상당히 일반적이지만 사용자가 기대하는 것은 아닙니다. –