Ну вот такой короче будет типа парсер, точнее вначале я напишу тулсу для описания языком, чтобы вы потом сами смогли если че свои языки влегкую пилить)
AST.token 'dot', '\.'
AST.token 'word', '[$\w]+'
AST.token 'bracket-open', '\['
AST.token 'bracket-close', '\]'
AST.structure 'EXP', 'описание выражений'
AST.structure 'IDENTIFER', '[word]'
AST.structure 'PROP_ACCESS', '[dot][word]'
AST.structure 'DYNAMIC_ACCESS', '[bracket-open] EXP [bracket-close]'
AST.structure 'PATH', 'IDENTIFER (PROP_ACCESS|DYNAMIC_ACCESS)*'
code = 'User.name[user.soname]'
ast = [
	{
		type: 'PATH'
		value: 'User.name[user.soname]'
		contents: [
			[
				{
					type: 'IDENTIFER'
					value: 'User'
				},
				{
					type: 'PROP_ACCESS'
					value: '.name'
					contents: [
						{
							type: 'word'
							value: 'name'
						}
					]
				},
				{
					type: 'DYNAMIC_ACCESS'
					value: '[user.soname]'
					contents: [
						{
							type: 'exp'
							value: 'user.soname'
							contents: [
									#...
							]
						}
					]
				},
			]
		]
	}
]
Потом напишу язык для описания того как из ast строить выходное дерево, то есть то же самое только в обратную сторону)) и все.
Будетекрасиво описывать в стиле регулярок что ожидаете на входе и как оно должн выводится. Красота??
Таким образом можно будет например написать препроцессор для css или компилятор из С++ в яваскрипт. Все что угодно. Максимум что я НЕ придумал это как задать универсальный формат AST... Языки то разные.