필자는 ANTLR 3.4에서 PHP5 파서를 작성했으나 거의 준비가되었지만 PHP의 까다로운 기능 중 하나는 처리 할 수 없습니다. 내 문제는 할당 연산자의 우선 순위입니다. PHP 매뉴얼 says처럼 할당의 우선 순위는 거의 목록의 끝에 있습니다. and
, xor
, or
및 ,
만 목록에 있습니다.PHP 파서에서 대입 연산자의 우선 순위를 처리하는 방법은 무엇입니까?
그러나 말한다 매뉴얼 페이지이에 메모가 :
=
하지만 대부분의 다른 사업자보다 낮은 우선 순위를 가지고는, PHP는 여전히 다음과 같은 식을 수 있습니다 : 에,if (!$a = foo())
을하는 반환 값이foo()
인 경우$a
에 넣습니다.
노트의 작은 예제는 내 파서에는 문제가 아니며,이를 assigment 규칙에서 특별한 경우로 처리 할 수 있습니다.
그러나 더 복잡한 코드가이 예 : 그것은 $a && $b
먼저 인식하고 conditioin의 나머지 부분을 처리 할 수 없기 때문에
if ($a && $b = func()) {}
내 파서 여기에 실패합니다. 이는 &&
이 =
보다 우선 순위가 높기 때문입니다. 내가 &&
의 오른쪽 대괄호를 넣으면 :
if ($a && ($b = func())) {}
을 이런 식으로 파서 잘 구조를 인식합니다.
연산자는 ANTLR 서적에서 권장하는 방식으로 작성됩니다. 첫 번째 단계에서 기본 표현이 있으며 각 수준의 연산자가 서로 뒤 따르고 있습니다.
이 우선 순위 점핑을 처리 할 방법이 있습니까?
감사를 당신의 응 답에 대한 이자형. 나는 그 진술을 진술로서 별도의 규칙을 만들지 않았다. 나는 이것이 누락 된 조각이라고 생각한다. – dtengeri
@ dtengeri도 환영합니다. –