라이브러리

[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) 파서의 우선순위를 지정하는 메서드입니다. 우선순위를 지정하지 않으면, 파서가 문법을 분석할 때 우선순위를 자동으로 지정합니다. 그러나 자동으로 지정된 우선순위가 항상 올바른 것은 아닐 수 있으므로, 우선순위를 수동으로 지정하는 것이 좋습니다.
  • profile_image
    나우호스팅 @pcs8404 

    호스팅포럼 화이팅!

    댓글목록

    등록된 댓글이 없습니다.

  • 전체 10,077건 / 342 페이지

검색

게시물 검색