다음이 있다고 말해
문법 # 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] 삭제
몇 마디 만하겠습니다