1e35fdd936d133bf8a48de140a3c666897588a05shiqian#!/usr/bin/env python 2e35fdd936d133bf8a48de140a3c666897588a05shiqian# 3e35fdd936d133bf8a48de140a3c666897588a05shiqian# Copyright 2007 Neal Norwitz 4e35fdd936d133bf8a48de140a3c666897588a05shiqian# Portions Copyright 2007 Google Inc. 5e35fdd936d133bf8a48de140a3c666897588a05shiqian# 6e35fdd936d133bf8a48de140a3c666897588a05shiqian# Licensed under the Apache License, Version 2.0 (the "License"); 7e35fdd936d133bf8a48de140a3c666897588a05shiqian# you may not use this file except in compliance with the License. 8e35fdd936d133bf8a48de140a3c666897588a05shiqian# You may obtain a copy of the License at 9e35fdd936d133bf8a48de140a3c666897588a05shiqian# 10e35fdd936d133bf8a48de140a3c666897588a05shiqian# http://www.apache.org/licenses/LICENSE-2.0 11e35fdd936d133bf8a48de140a3c666897588a05shiqian# 12e35fdd936d133bf8a48de140a3c666897588a05shiqian# Unless required by applicable law or agreed to in writing, software 13e35fdd936d133bf8a48de140a3c666897588a05shiqian# distributed under the License is distributed on an "AS IS" BASIS, 14e35fdd936d133bf8a48de140a3c666897588a05shiqian# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15e35fdd936d133bf8a48de140a3c666897588a05shiqian# See the License for the specific language governing permissions and 16e35fdd936d133bf8a48de140a3c666897588a05shiqian# limitations under the License. 17e35fdd936d133bf8a48de140a3c666897588a05shiqian 18e35fdd936d133bf8a48de140a3c666897588a05shiqian"""Generic utilities for C++ parsing.""" 19e35fdd936d133bf8a48de140a3c666897588a05shiqian 20e35fdd936d133bf8a48de140a3c666897588a05shiqian__author__ = 'nnorwitz@google.com (Neal Norwitz)' 21e35fdd936d133bf8a48de140a3c666897588a05shiqian 22e35fdd936d133bf8a48de140a3c666897588a05shiqian 23e35fdd936d133bf8a48de140a3c666897588a05shiqianimport sys 24e35fdd936d133bf8a48de140a3c666897588a05shiqian 25e35fdd936d133bf8a48de140a3c666897588a05shiqian 26e35fdd936d133bf8a48de140a3c666897588a05shiqian# Set to True to see the start/end token indices. 27e35fdd936d133bf8a48de140a3c666897588a05shiqianDEBUG = True 28e35fdd936d133bf8a48de140a3c666897588a05shiqian 29e35fdd936d133bf8a48de140a3c666897588a05shiqian 30e35fdd936d133bf8a48de140a3c666897588a05shiqiandef ReadFile(filename, print_error=True): 31e35fdd936d133bf8a48de140a3c666897588a05shiqian """Returns the contents of a file.""" 32e35fdd936d133bf8a48de140a3c666897588a05shiqian try: 33e35fdd936d133bf8a48de140a3c666897588a05shiqian fp = open(filename) 34e35fdd936d133bf8a48de140a3c666897588a05shiqian try: 35e35fdd936d133bf8a48de140a3c666897588a05shiqian return fp.read() 36e35fdd936d133bf8a48de140a3c666897588a05shiqian finally: 37e35fdd936d133bf8a48de140a3c666897588a05shiqian fp.close() 38e35fdd936d133bf8a48de140a3c666897588a05shiqian except IOError: 39e35fdd936d133bf8a48de140a3c666897588a05shiqian if print_error: 40e35fdd936d133bf8a48de140a3c666897588a05shiqian print('Error reading %s: %s' % (filename, sys.exc_info()[1])) 41e35fdd936d133bf8a48de140a3c666897588a05shiqian return None 42