module Slaw

module Grammars
  grammar Terminals
    ##########
    # terminals

    # eg. 2, 2A, 2b
    rule number_letter
      number letter*
    end

    rule letter_ordinal
      letter (letter / digit)*
    end

    rule dotted_number_3
      number '.' number ('.' number)+
    end

    rule dotted_number_2
      # 9.1
      # 9.1A
      # 9.1A1
      # NOT: 9.A
      number '.' number alphanums?
    end

    rule number
      digit+
    end

    rule digit
      [0-9]
    end

    rule letter
      [a-zA-Z]
    end

    rule alphanums
      [a-zA-Z0-9]+
    end

    ##########
    # whitespace

    rule space
      [ \t]+
    end

    rule whitespace
      [ \t\n]*
    end

    rule empty_line
      space? newline
    end

    rule eol
      newline
      empty_line*
    end

    rule newline
      "\n"
    end
  end
end

end