나는 ANTLRv4 책에서 석회질/레이블 표현 자습서를하고있는 중이 야를 찾을 수 없습니다 내가 컴파일 할 때 나는이 얻을 :ANTLR4는 : 기호 연산
EvalVisitor.java:33: error: cannot find symbol
if (ctx.op.getType() == CalcParser.MUL || ctx.op.getType() == CalcParser.MIDDOT) {
^
symbol: variable op
location: variable ctx of type MulDivContext
공정에서, 나는 그것을 장난을 조금 수정했습니다. 내 문법은 다음과 같습니다
expr : expr (STAR | FSLASH | DIVIDE | MIDDOT) expr # MulDiv
그리고 그 때문에 같은 CommonLexer 파일에 정의되어 있습니다 :
lexer grammar CommonLexerRules;
ID : [a-zAZ]+ ;
INT : [0-9]+ ;
STAR : '*';
이 GRUN와 잘 작동 및 테스트 파일이 제대로 lexed된다. 그러나 *에 대한 몇 가지 대안을 정의하여 작동 방식을 변경했다고 생각합니다. 즉, 곱셈을 항상 의미하는 *을 원하지 않으며 곱셈으로서 MIDDOT '·'을 구문 분석하려고합니다.
내 문제는 생성 된 코드에 '.op'이없는 것 같습니다. 이 어떻게 생겼는지
이 같은 것입니다 :
*
/\
a b
경우 A, B, 그리고 * EXPR 있습니다. 그래서 내가 원하는 것은, 어떤 종류의 토큰으로 * 나는 CalcParser.MUL과 CalcParser.MIDDOT 등을 비교할 수있는 토큰으로 접근하는 것입니다.
어떤 도움을 주시면 감사하겠습니다.
/제이슨
OMG, 나는 그것을 놓친다 고 나는 믿을 수 없다. 너 규칙. –
:) 오신 것을 환영합니다. 또한 내 수정 된 답변, btw를 참조하십시오. –