라이브러리
[PHP] ParleRParser::precedence - 우선순위 규칙 선언
ParleRParser::precedence
ParleRParser는 PHP의 파서 라이브러리 중 하나로, LL(1) 파서를 생성하는 데 사용됩니다. LL(1) 파서는 문법을 분석하는 데 사용되는 파서의 한 종류입니다. ParleRParser::precedence는 LL(1) 파서의 우선순위를 지정하는 메서드입니다.
우선순위는 파서가 문법을 분석할 때 사용하는 규칙입니다. 예를 들어, `A -> B + C`와 `A -> B * C`가 있다고 가정해 보겠습니다. 이 경우, `+`와 `*`의 우선순위를 지정해야 합니다. 만약 `+`가 우선순위가 높다면, 파서가 `A -> B + C`를 분석할 때 `B + C`를 먼저 분석하고, 그 결과를 `A`에 할당합니다. 만약 `*`가 우선순위가 높다면, 파서가 `A -> B * C`를 분석할 때 `B * C`를 먼저 분석하고, 그 결과를 `A`에 할당합니다.
예제
다음은 PHP에서 ParleRParser::precedence를 사용하는 예제입니다.
#hostingforum.kr
php
use ParleRParserParser;
// 문법을 정의합니다.
$parser = new Parser();
$parser->addRule('A', ['B', '+', 'C']);
$parser->addRule('A', ['B', '*', 'C']);
$parser->addRule('B', ['D']);
$parser->addRule('C', ['E']);
$parser->addRule('D', ['F']);
$parser->addRule('E', ['F']);
$parser->addRule('F', ['a']);
// 우선순위를 지정합니다.
$parser->precedence('+', 1);
$parser->precedence('*', 2);
// 문법을 분석합니다.
$parser->parse('A + B * C');
이 예제에서는 `A -> B + C`와 `A -> B * C`가 있는 문법을 정의하고, `+`와 `*`의 우선순위를 지정합니다. `+`의 우선순위가 높기 때문에, 파서가 `A + B * C`를 분석할 때 `B * C`를 먼저 분석하고, 그 결과를 `A + ...`에 할당합니다.
결과
파서가 `A + B * C`를 분석한 결과는 다음과 같습니다.
#hostingforum.kr
A + (B * C)
파서가 `B * C`를 먼저 분석한 이유는 `*`의 우선순위가 높기 때문입니다.
참고
ParleRParser::precedence는 LL(1) 파서의 우선순위를 지정하는 메서드입니다. 우선순위를 지정하지 않으면, 파서가 문법을 분석할 때 우선순위를 자동으로 지정합니다. 그러나 자동으로 지정된 우선순위가 항상 올바른 것은 아닐 수 있으므로, 우선순위를 수동으로 지정하는 것이 좋습니다.
-
- 나우호스팅 @pcs8404
-
호스팅포럼 화이팅!
댓글목록
등록된 댓글이 없습니다.