Показать сообщение отдельно
  #99 (permalink)  
Старый 29.09.2015, 10:31
Профессор
Отправить личное сообщение для ТОТ_САМЫЙ Посмотреть профиль Найти все сообщения от ТОТ_САМЫЙ
 
Регистрация: 10.09.2015
Сообщений: 184

Ну вот такой короче будет типа парсер, точнее вначале я напишу тулсу для описания языком, чтобы вы потом сами смогли если че свои языки влегкую пилить)


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... Языки то разные.

Последний раз редактировалось ТОТ_САМЫЙ, 29.09.2015 в 10:33.
Ответить с цитированием