Source: http://www.lingref.com/cpp/galana/2/paper1587.pdf