
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