Antlr4 파서 생성기 Java 팁
완전히 동일한 패턴과 일치하는 여러 어휘 분석기 규칙을 피하십시오. 그렇지 않으면 그 중 하나가 절대 일치하지 않습니다. 내 파서에는 두 개의 노드와 가중치가 있으며 모두 숫자이지만 서로 다른 요소이므로 다음과 같이 각각에 대해 서로 다른 렉서 규칙을 사용해야 한다고 생각했습니다.
tuple
: nodefrom weight nodeto
;
nodefrom: [0-9]+;
weight: [0-9]+;
nodeto: [0-9]+;
그리고 이로 인해 불일치가 발생합니다. 이를 방지하려면 정수에 대해 하나의 Lexer 규칙만 사용하는 것이 좋습니다.
tuple
: nodefrom weight nodeto
;
nodefrom: INT;
weight: INT;
nodeto: INT;
INT: [0-9]+;
예를 들어,
expr
: expr '*' #aster
| expr '.' expr #concate
| expr '+' expr #plus
| tuple #tup
| '(' expr ')' #parens
;
이것은 스타, 연결 및 플러스의 세 가지 작업을 사용하는 내 파서의 일부입니다. #aster, #concate 및 #or를 사용하면 visitAster(), visitConcate() 및 visitPlus() 인터페이스를 생성한 다음 이러한 작업을 별도로 구현할 수 있습니다. 이러한 태그를 생성하지 않으면 하나의 인터페이스인 visitExpr()만 생성됩니다.
(Node1, Weight_1, Weight_2, Node2)이며 각 값에 대한 방문 방법이 있습니다. 내가 생성한 방문자가 계산을 위해 Weight_1만 필요한 경우 특별히 visitWeight_1()을 구현해야 합니다.
이것은 내가 사용하고 있는 구문 분석 트리의 일부입니다. 튜플에는 (nodef, wc, wd, nodet)(괄호 포함) 6개의 요소가 있습니다. 따라서 바로 지금 visitTuple(Parser.TupleContext ctx) 함수에서 wc의 값을 얻으려면 ctx.wc()와 같은 것을 작성할 수 있습니다.
아직 일하고 있어...
Reference
이 문제에 관하여(Antlr4 파서 생성기 Java 팁), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/tinjiklau/antlr4-parser-generator-java-tips-4kp8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)