Programming languages, such as Ruby, are natural and elegant. But to achieve this elegance, things have to happen under the hood.
Let's see how does a ruby code is compiled and interpreted.
Before moving forward lets see the structure(cross-section) of ruby and its world.
90% of work is done on the surface, so that we focus on developing business value .
The following code will be split into tokens by ruby lexer
puts 'Welcome to Ruby World'Tokenized Representation :
[“puts”,” ”,”'”,”Welcome to Ruby World”,”'”]Lexed Representation : Lexer Format:
[[line number,column],type,token]
[[1,0]:on_ident,”puts”], [1,4]:on_sp,” ”] [1,5]:on_t_string_beg,”'”] [1,6]:on_t_string_content,”Welcome to Ruby World”] [1,28]:on_t_string_end,”'”]]Once the code generates token & is lexed , now the parser will start its job by taking the lexed representation and create a Abstract syntax tree. AST:
[:program, [[:command, [:@ident, ”puts” , [1,0] ], [:args_add_block, [[:string_literal, [:string_content],[:@string_content, “Welcome to Ruby World”,[1,6]]]]], false]]]Once AST finishes the job the compiler will convert to byte code, Now it is executed/interpreted by VM This is Implemented in MRI. Ruby uses lex(Lexer) & bison(parser generator). Implementation of Above code in CLI/Ruby Program :
require “ripper” require “pp” src= “puts 'Welcome to Ruby World'” puts “source: #{src}” puts “tokenized:” pp Ripper.tokenize(src) puts “lexed:” pp Ripper.lex(src) puts “parsed:” pp Ripper.sexp(src)Refer Confreaks Njoy Coding in Ruby !! Thanks to Santosh Mohanty for writing this post .