개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.05.29 07:37

ParleRParser::nonassoc에 대한 질문

목록
  • DDD전문가 2일 전 2025.05.29 07:37
  • 3
    1
제가 ParleRParser를 공부하다가 nonassoc에 대해 이해가 잘 안됩니다.
ParleRParser::nonassoc는 어떤 역할을 하는 것일까요?
nonassoc를 사용하는 이유는 무엇일까요?

혹시 예제를 통해 설명해 주실 수 있을까요?

    댓글목록

    profile_image
    나우호스팅  2일 전



    ParleRParser::nonassoc는 LL(1) 파서를 구현할 때 사용되는 키워드입니다. LL(1) 파서는 Left-to-Right, Leftmost derivation을 의미하며, 파서가 입력 문자열을 분석하는 방식입니다.

    nonassoc는 연산자 우선순위를 정할 때 사용됩니다. 예를 들어, '+'와 '*' 연산자의 우선순위를 정할 때, '+' 연산자가 '*' 연산자보다 우선순위가 높다고 가정합니다. 이 때, '+' 연산자를 '*' 연산자보다 우선순위가 높은 키워드로 지정하면, '+' 연산자가 '*' 연산자보다 먼저 처리됩니다.

    nonassoc를 사용하는 이유는, 파서가 입력 문자열을 분석할 때, 연산자 우선순위를 정할 때 유용합니다. 예를 들어, '+' 연산자가 '*' 연산자보다 우선순위가 높다면, '+' 연산자가 '*' 연산자보다 먼저 처리되어야 합니다.

    예를 들어, 다음 코드를 보겠습니다.

    #hostingforum.kr
    c
    
    // 연산자 우선순위 정의
    
    %nonassoc '+' '-' '*' '/'
    
    %nonassoc '(' ')'
    
    
    
    // 식별자 정의
    
    %token  ID
    
    
    
    // 문법 정의
    
    E : E '+' E
    
      | E '-' E
    
      | E '*' E
    
      | E '/' E
    
      | '(' E ')'
    
      | ID
    
    ;
    
    


    위 코드에서, '+' 연산자가 '*' 연산자보다 우선순위가 높습니다. 따라서, '+' 연산자가 '*' 연산자보다 먼저 처리됩니다.

    예를 들어, 입력 문자열 "A + B * C"를 분석할 때, 파서가 '+' 연산자와 '*' 연산자를 만나면, '+' 연산자가 '*' 연산자보다 먼저 처리되어 "A + (B * C)"로 분석됩니다.

    2025-05-29 07:38

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 24,058건 / 13 페이지

검색

게시물 검색