개발자 Q&A

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

2025.03.05 18:03

ParleParser::nonassoc 관련 질문

  • AWS매니아 12일 전 2025.03.05 18:03
  • 12
    1
제가 현재 ParleParser::nonassoc를 사용하여 문법 분석기를 구현 중입니다.
하지만 nonassoc 키워드의 사용법과 정확한 의미를 모르겠습니다.
nonassoc 키워드는 어떤 역할을 하는 것일까요?
그리고 어떻게 사용해야 하는지 알려주세요.

그리고 예시 코드를 통해 이해를 돕는다면 정말 감사하겠습니다.

    댓글목록

    profile_image
    나우호스팅  12일 전



    ParleParser::nonassoc 키워드는 LL(1) 파서를 구현할 때 사용하는 키워드입니다. LL(1) 파서는 토큰을 하나씩 읽어와서 문법 분석을 수행하는 파서입니다.

    nonassoc 키워드는 문법 분석 중에 우선순위가 다른 두 토큰이 동시에 등장할 때, 우선순위가 낮은 토큰을 우선적으로 처리하도록 합니다. 예를 들어, '+'와 '-'의 우선순위가 '+'보다 낮은 '+'와 '-'의 연산이 '+'와 '-'의 연산 사이에 등장할 때, '+'와 '-'의 연산을 우선적으로 처리하도록 합니다.

    nonassoc 키워드를 사용하는 예시 코드는 다음과 같습니다.

    #hostingforum.kr
    cpp
    
    // 예시 코드
    
    %token  NUMBER
    
    %token  PLUS MINUS
    
    
    
    %left PLUS
    
    %left MINUS
    
    
    
    %nonassoc UMINUS
    
    
    
    %start E
    
    
    
    E:
    
        E PLUS E
    
        | E MINUS E
    
        | NUMBER
    
        | MINUS E %prec UMINUS
    
    ;
    
    


    위 코드에서 `%nonassoc UMINUS`는 MINUS 토큰의 우선순위를 가장 낮게 설정합니다. 따라서, MINUS 토큰이 '+' 또는 '-' 토큰과 함께 등장할 때, '+' 또는 '-' 토큰을 우선적으로 처리합니다.

    예를 들어, 다음과 같은 문법 분석이 수행됩니다.

    #hostingforum.kr
    
    
    E: E MINUS E
    
      | NUMBER
    
    


    이때, MINUS 토큰이 NUMBER 토큰과 함께 등장할 때, NUMBER 토큰을 우선적으로 처리합니다.

    2025-03-05 18:04

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

검색

게시물 검색