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

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

Avatar for 蒼時弦や 蒼時弦や
February 14, 2018

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

Avatar for 蒼時弦や

蒼時弦や

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’