Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Taipei.rb 寫一個送禮自用兩相宜的 Compiler

蒼時弦や
February 14, 2018

Taipei.rb 寫一個送禮自用兩相宜的 Compiler

蒼時弦や

February 14, 2018
Tweet

More Decks by 蒼時弦や

Other Decks in Programming

Transcript

  1. class Lexer < Array KEYWORDS = %w[if else end puts].freeze

    KEYWORD_RULE = /(?<keyword>#{KEYWORDS.join('|')})/ end Lexer
  2. Tokeinzer.new(['if', 'reset']) # [ # <Token @type=“keyword” # @value="if"> #

    <Token @type=“identifier" # @value="reset"> # ] Tokenizer
  3. loop do break if t.peek.else? || #... #… if t.peek.fn?

    next @ast << Node::Function.new(t) end #... end Parser
  4. Context Parser Function Enter Context State Exit State Next token

    is ‘else’ Enter Function State Exit State Next token is ‘end’