Я не знаю каких-либо конкретных подробностей о разборе Ruby или о том, почему вы настаиваете на том, чтобы «не возвращаться назад». Я предполагаю, что вы считаете, что грамматика Ruby не является LALR (1), например, не обрабатывается YACC или эквивалентами.
В любом случае, если проблема заключается в том, чтобы проанализировать язык, грамматика которого не зависит от контекста, это можно сделать с помощью синтаксического анализатора GLR, который не возвращает:
http://en.wikipedia.org/wiki/GLR_parser
Я использовал это для создания производственных парсеров для многих реальных языков.