> 백엔드 개발 > C++ > LR(1) 파서가 C 의 모호한 문법을 ​​처리할 수 없는 이유는 무엇입니까?

LR(1) 파서가 C 의 모호한 문법을 ​​처리할 수 없는 이유는 무엇입니까?

Susan Sarandon
풀어 주다: 2024-12-28 03:02:10
원래의
266명이 탐색했습니다.

Why Can't LR(1) Parsers Handle C  's Ambiguous Grammar?

C에서 LR(1) 구문 분석이 짧은 이유

많은 프로그래밍 언어는 LR 파서의 변형을 사용하여 분석할 수 있지만 C는 주목할만한 예외. 이는 C가 LR(1) 파서가 처리하도록 설계된 모호한 문법 규칙을 허용하기 때문입니다.

다음 C 문을 고려하세요.

x * y ;
로그인 후 복사

이 문은 두 개의 서로 다른 구문 분석을 가질 수 있습니다.

  1. y를 x 유형에 대한 포인터로 선언할 수 있습니다.
  2. x를 곱할 수 있습니다. y, 결과를 폐기합니다.

LR(1) 파서는 하나의 토큰에 대한 예측에만 기초하여 이 두 가지 해석을 구별할 수 없습니다. 이러한 모호성은 C에서 표현식을 선언과 명령문 모두로 사용할 수 있다는 사실에서 비롯됩니다.

이러한 모호성을 수용하기 위해 C 파서는 일반적으로 기호 테이블 정보와 결합된 결정론적 구문 분석 기술에 의존합니다. 파서는 x 유형을 확인하여 명령문이 선언인지 아니면 곱셈인지 결정할 수 있습니다.

또는 GLR 파서(일반화 LR 파서)는 두 구문 분석을 모두 허용하고 이를 형식으로 표현하여 C의 모호성을 처리할 수 있습니다. 그래프 구조. 그런 다음 후속 단계에서 해결되지 않은 모호성을 해결할 수 있습니다.

결론적으로 C에는 LR(1) 파서가 효과적으로 처리할 수 없는 모호한 문법 규칙을 수용할 수 있는 구문 분석 기술이 필요합니다.

위 내용은 LR(1) 파서가 C 의 모호한 문법을 ​​처리할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿