ANTLR의 모든 경우에 남아있는 재귀를 제거 할 수 있습니까?

user1870400

다음이 있다고 말해

문법 # 1

expr:
    expr AND expr
    | expr OR expr
    | primary 
;

그리고 이것으로 바뀝니다.

문법 # 2

expr:
    andExpr
    | primary
;
andExpr: orExpr AND orExpr;
orExpr: ... OR ...;

하지만 여전히 이것이 어떻게 문제를 해결할 수 있는지 모르겠습니까? 문법 # 1에서 나는 표현할 수 있습니다

true and false and true and true or false
true or false and true

나는 Grammar # 1로 이렇게 계속 연결할 수 있습니다. 그러나 문법 # 2를 사용하여 이것을 달성하는 방법을 보지 못하고 있습니까?

바트 키 어스

다음과 같이 작성할 수 있습니다.

grammar Test;

parse
 : expr EOF
 ;

expr
 : or_expr
 ;

or_expr
 : and_expr (OR and_expr)*
 ;

and_expr
 : primary (AND primary)*
 ;

primary
 : TRUE
 | FALSE
 | '(' expr ')'
 ;

TRUE  : 'true';
FALSE : 'false';
AND   : 'and';
OR    : 'or';

SPACES
 : [ \t\r\n] -> skip
 ;

이렇게하면 AND식이 OR 식보다 우선 순위가 높습니다.

입력을 true and ((false or true) and true or false)다음과 같이 구문 분석하면 다음 구문 분석 트리가 생성됩니다.

여기에 이미지 설명 입력

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

파이썬의 문자열 목록에서 모든 작은 따옴표를 제거 할 수 있습니까?

분류에서Dev

한 디렉토리에 재귀 모드로 모든 파일의 모든 내용을 쉽게 표시 할 수있는 방법이 있습니까?

분류에서Dev

모든 경우에 두 개의 .java 파일 메소드와 필드를 비교할 수 있습니까?

분류에서Dev

노드 스폰에서 현재의 모든 환경 변수를 어떻게 전달할 수 있습니까?

분류에서Dev

git remote의 URL에서 "ssh : //"를 제거 할 수 있습니까?

분류에서Dev

git remote의 URL에서 "ssh : //"를 제거 할 수 있습니까?

분류에서Dev

브라우저 창 (전체 화면 아님)에서 모든 크롬을 제거 할 수 있습니까?

분류에서Dev

파이썬에서 재귀를 통해 살아남는 목록에 문제가 있습니다. 그래프에서 가능한 모든 경로 찾기

분류에서Dev

재귀 프로그래밍에서 배열의 모든 요소로 곱셈표를 어떻게 작성할 수 있습니까?

분류에서Dev

데스크탑의 현재 OS에 문제가있는 경우 USB에서 부팅 할 수 있습니까?

분류에서Dev

디렉토리의 모든 파일에서 빈 줄을 어떻게 제거 할 수 있습니까?

분류에서Dev

jQuery를 사용하여 단락에서 모든 앵커 태그를 제거 할 수 있습니까?

분류에서Dev

열거 형 변형의 모든 구조체 멤버를 단일 변수에 바인딩 할 수 있습니까?

분류에서Dev

dplyr은 as. 문자열에서 모든 점을 제거 할 수 있습니까?

분류에서Dev

이 예제에서 재귀 적 CTE를 활용할 수 있습니까?

분류에서Dev

DNS 없음-제출할 때 위키피디아의 모든 편집 정보를 잃어 버렸습니다. 제가 할 수있는 일이 있습니까?

분류에서Dev

푸시 세그의 경우 어떻게 든 애니메이션을 제거 할 수 있습니까?

분류에서Dev

어떻게 봄 부팅의 모든 캐시를 퇴거 할 수 있습니까?

분류에서Dev

bash의 마지막 매개 변수를 제외한 모든 것을 어떻게 에코 할 수 있습니까?

분류에서Dev

나중에! = ""를 확인하는 경우 C #에서 null 확인의 필요성을 제거 할 수있는 방법이 있습니까?

분류에서Dev

하나의 열에 다른 함수를 적용해야하는 경우 모든 열을 나열하지 않고 agg 함수를 적용 할 수 있습니까?

분류에서Dev

재귀 함수가 함수의 원래 호출에서 변수를 변경할 수 있습니까?

분류에서Dev

클래스를 제어 할 수없는 경우 클래스에서 메서드를 어떻게 모의 할 수 있습니까?

분류에서Dev

iptables를 사용하는 경우 ufw를 제거 할 수 있습니까?

분류에서Dev

폴더에있는 모든 파일의 모든 파일 확장자를 빠르게 변경할 수있는 방법이 있습니까?

분류에서Dev

폴더에있는 모든 파일의 모든 파일 확장자를 빠르게 변경할 수있는 방법이 있습니까?

분류에서Dev

폴더에있는 모든 파일의 모든 파일 확장자를 빠르게 변경할 수있는 방법이 있습니까?

분류에서Dev

폴더에있는 모든 파일의 모든 파일 확장자를 빠르게 변경할 수있는 방법이 있습니까?

분류에서Dev

모든 모델에 대해 as_json 메서드를 재정의 할 수 있습니까?

Related 관련 기사

  1. 1

    파이썬의 문자열 목록에서 모든 작은 따옴표를 제거 할 수 있습니까?

  2. 2

    한 디렉토리에 재귀 모드로 모든 파일의 모든 내용을 쉽게 표시 할 수있는 방법이 있습니까?

  3. 3

    모든 경우에 두 개의 .java 파일 메소드와 필드를 비교할 수 있습니까?

  4. 4

    노드 스폰에서 현재의 모든 환경 변수를 어떻게 전달할 수 있습니까?

  5. 5

    git remote의 URL에서 "ssh : //"를 제거 할 수 있습니까?

  6. 6

    git remote의 URL에서 "ssh : //"를 제거 할 수 있습니까?

  7. 7

    브라우저 창 (전체 화면 아님)에서 모든 크롬을 제거 할 수 있습니까?

  8. 8

    파이썬에서 재귀를 통해 살아남는 목록에 문제가 있습니다. 그래프에서 가능한 모든 경로 찾기

  9. 9

    재귀 프로그래밍에서 배열의 모든 요소로 곱셈표를 어떻게 작성할 수 있습니까?

  10. 10

    데스크탑의 현재 OS에 문제가있는 경우 USB에서 부팅 할 수 있습니까?

  11. 11

    디렉토리의 모든 파일에서 빈 줄을 어떻게 제거 할 수 있습니까?

  12. 12

    jQuery를 사용하여 단락에서 모든 앵커 태그를 제거 할 수 있습니까?

  13. 13

    열거 형 변형의 모든 구조체 멤버를 단일 변수에 바인딩 할 수 있습니까?

  14. 14

    dplyr은 as. 문자열에서 모든 점을 제거 할 수 있습니까?

  15. 15

    이 예제에서 재귀 적 CTE를 활용할 수 있습니까?

  16. 16

    DNS 없음-제출할 때 위키피디아의 모든 편집 정보를 잃어 버렸습니다. 제가 할 수있는 일이 있습니까?

  17. 17

    푸시 세그의 경우 어떻게 든 애니메이션을 제거 할 수 있습니까?

  18. 18

    어떻게 봄 부팅의 모든 캐시를 퇴거 할 수 있습니까?

  19. 19

    bash의 마지막 매개 변수를 제외한 모든 것을 어떻게 에코 할 수 있습니까?

  20. 20

    나중에! = ""를 확인하는 경우 C #에서 null 확인의 필요성을 제거 할 수있는 방법이 있습니까?

  21. 21

    하나의 열에 다른 함수를 적용해야하는 경우 모든 열을 나열하지 않고 agg 함수를 적용 할 수 있습니까?

  22. 22

    재귀 함수가 함수의 원래 호출에서 변수를 변경할 수 있습니까?

  23. 23

    클래스를 제어 할 수없는 경우 클래스에서 메서드를 어떻게 모의 할 수 있습니까?

  24. 24

    iptables를 사용하는 경우 ufw를 제거 할 수 있습니까?

  25. 25

    폴더에있는 모든 파일의 모든 파일 확장자를 빠르게 변경할 수있는 방법이 있습니까?

  26. 26

    폴더에있는 모든 파일의 모든 파일 확장자를 빠르게 변경할 수있는 방법이 있습니까?

  27. 27

    폴더에있는 모든 파일의 모든 파일 확장자를 빠르게 변경할 수있는 방법이 있습니까?

  28. 28

    폴더에있는 모든 파일의 모든 파일 확장자를 빠르게 변경할 수있는 방법이 있습니까?

  29. 29

    모든 모델에 대해 as_json 메서드를 재정의 할 수 있습니까?

뜨겁다태그

보관