Computer >> 컴퓨터 >  >> 프로그램 작성 >> Ruby

코드를 구문 분석하는 Ruby를 시청하세요.

실용적이고 유익한 내용을 잠시 쉬면서 깔끔한 루비 파티 트릭을 보여드리면 재미있을 것 같아요.

Ruby는 프로그램을 실행하기 전에 이를 구문 분석해야 합니다. 파서는 일종의 상태 머신입니다. Ruby가 상태 시스템이 수행하는 모든 작업을 기록하도록 하는 데 사용할 수 있는 잘 알려지지 않은 명령줄 플래그가 있습니다.

다음 예를 들어보세요.

a = 1 + 2

-y를 사용하여 이것을 실행하면 플래그를 입력하면 다음과 같은 출력이 나타납니다.

$ ruby -y sample.rb
Starting parse
Entering state 0
Reducing stack by rule 1 (line 903):
-> $$ = nterm $@1 ()
Stack now 0
Entering state 2
Reading a token: Next token is token tIDENTIFIER ()
Shifting token tIDENTIFIER ()
Entering state 35
Reading a token: Next token is token '=' ()
Reducing stack by rule 509 (line 4417):
   $1 = token tIDENTIFIER ()
-> $$ = nterm user_variable ()
Stack now 0 2
Entering state 113
Next token is token '=' ()
Reducing stack by rule 100 (line 1764):
   $1 = nterm user_variable ()
-> $$ = nterm lhs ()
Stack now 0 2
...
140 more lines

여기에서 볼 수 있는 것은 Ruby 파서가 파일의 각 토큰을 순환하고 다음 작업을 수행하는 것입니다.

  • 스택에 토큰 추가
  • 스택을 규칙 목록과 비교
    • 토큰이 규칙과 일치하면 상태 전환 수행
    • 일치하는 항목이 없으면 스택에 다른 토큰을 추가하고 다시 시도하세요.

모든 상태와 규칙은 C에 있는 실제 파서를 생성하기 위해 들소 파서 생성기에 의해 처리되는 파일인 parse.y에 정의되어 있습니다.