"토큰화"의 두 판 사이의 차이

나루 위키
둘러보기로 가기 검색하러 가기
(새 문서: '''토큰화''' 과정은 유니코드 스칼라 값의 열을 토큰열로 바꾸어 파싱 과정으로 넘긴다. 토큰화는 기본적으로 가장 긴 올바른 토...)
 
잔글
 
(같은 사용자의 중간 판 하나는 보이지 않습니다)
3번째 줄: 3번째 줄:
 
토큰화는 기본적으로 가장 긴 올바른 토큰을 찾는(maximal munching rule) 간단한 규칙으로 동작하지만, 두 가지 예외가 있다. 우선 [[문법 맥락]]에 따라 현재 시점에서 올바른 토큰의 목록이 늘어날 수 있다. 이렇게 늘어난 목록은 그 맥락을 감싸던 [[구획]]이 닫힐 때 원상 복귀된다.
 
토큰화는 기본적으로 가장 긴 올바른 토큰을 찾는(maximal munching rule) 간단한 규칙으로 동작하지만, 두 가지 예외가 있다. 우선 [[문법 맥락]]에 따라 현재 시점에서 올바른 토큰의 목록이 늘어날 수 있다. 이렇게 늘어난 목록은 그 맥락을 감싸던 [[구획]]이 닫힐 때 원상 복귀된다.
  
<pre class=naru>
+
<pre class=naru data-naru-kw="comefrom@3 label@2">
 
{
 
{
 
     use comefrom (syntax label, syntax comefrom) -- 패키지로부터 예약어를 불러 오면
 
     use comefrom (syntax label, syntax comefrom) -- 패키지로부터 예약어를 불러 오면

2019년 7월 11일 (목) 04:16 기준 최신판

토큰화 과정은 유니코드 스칼라 값의 열을 토큰열로 바꾸어 파싱 과정으로 넘긴다.

토큰화는 기본적으로 가장 긴 올바른 토큰을 찾는(maximal munching rule) 간단한 규칙으로 동작하지만, 두 가지 예외가 있다. 우선 문법 맥락에 따라 현재 시점에서 올바른 토큰의 목록이 늘어날 수 있다. 이렇게 늘어난 목록은 그 맥락을 감싸던 구획이 닫힐 때 원상 복귀된다.

{
    use comefrom (syntax label, syntax comefrom) -- 패키지로부터 예약어를 불러 오면
    comefrom foo -- 이제부터는 해당 예약어가 특수한 의미를 가지게 된다
    `comefrom` = "foo" -- ``로 감싼 이름으로 예약어를 보통 이름으로 쓸 수 있다
    #"Coming from #(`comefrom`)" println()
    label foo
}

label bar -- 오류: `label`은 더 이상 예약어가 아니다

또한 구획은 대응하는 구획에 따라 다르게 토큰화될 수 있다. 이미 지나간 여는 구획이 닫는 구획에 의해 쪼개질 수도 있다. (당연한 기술적 이유로, 실제로는 이 과정은 토큰화가 아니라 파싱 단계에서 일어난다.)

( (( a ))) -- `)))`는 `))`와 `)`로 나뉜다
(( ( a ))) -- `)))`는 `)`와 `))`로 나뉜다
((( a )))  -- `)))`는 하나의 토큰이다

(((a + b) + c) + d) -- `( ( (a + b) + c) + d)`와 같다
(a + (((b + c)) + d)) -- `(a + ( ((b + c)) + d) )`와 같다