grammar XCodeStrings

rule document
  (whitespace / comment / definition)* {
    def content
      elements.collect { |i| i.content }.select { |i| i[0] != :whitespace }
    end
  }
end
rule comment
  start_comment comment_content end_comment {
    def content
      [:comment, elements[1].text_value]
    end
  }
end
rule comment_content
  (!end_comment character)+
end
rule definition
  key assignment value end_definition {
    def content
      [:definition, elements[0].content, elements[2].content]
    end
  }
end
rule end_definition
  whitespace* ';'
end
rule assignment
  whitespace* '=' whitespace*
end
rule key
  quoted_string
end
rule value
  quoted_string
end
rule whitespace
  [ \t\r\n] {
    def content
      [:whitespace, text_value]
    end
  }
end
rule start_comment
  '/*'
end
rule end_comment
  '*/'
end
rule character
  .
end
rule string_content
  (escaped_double_quote / !double_quote character)*
end
rule escaped_double_quote
  '\\' double_quote
end
rule double_quote
  '"'
end
rule quoted_string
  double_quote string_content double_quote {
    def content
      elements[1].text_value
    end
  }
end

end