Создание нового языка программирования - с чего начать: различия между версиями

Материал из Вики проекта PascalABC.NET
Перейти к навигацииПерейти к поиску
Строка 29: Строка 29:
</source>
</source>
Здесь - первая строка
Здесь - первая строка
<source lang="Delphi">!<%NAME%> %CODE%</source>
задает вид правой части: <token_info>. В данном случае %NAME%=token_info, %CODE% - пустой

Версия от 17:34, 1 мая 2010

Мы будем создавать парсер языка - программу, переводящую текст программы на языке программирования, в так называемое синтаксическое дерево. По-существу, парсер является первой частью компилятьра, его front-endом.

Папка с грамматикой

В папке с грамматикой - 2 файла - .grm и .pgt. .grm содержит файл с грамматикой в формате Gold Parser Builder, дополненный шаблонами действий (действия - в стиле Yacc). Шаблоны действий хранятся в виде комментариев Gold Parser Builder, так что на компиляцию им грамматики не влияют.

.pgt - это шаблон для создания скелета парсера, имеется для различных языков, мы используем для C#. Это означает, что сами парсеры

Все остальные файлы, если они есть, - можно убить - они генерируются автоматически.

По .grm файлу Gold Parser Builder автоматически создает .cgt файл - это файл откомпилированной грамматики - пока без правил. Они будут учтены позже.

Шаблоны в .grm файле

Шаблоны создавались Ткачуком для облегчения автоматической генерации кода. Рассмотрим пример:

!<%NAME%> %CODE%
!*
[TERMINALTEMPLATE]
		{
			%NAME% _%NAME%=new %NAME%(%PARAMS%);
			_%NAME%.source_context=parsertools.GetTokenSourceContext();
			%CODE%
			return _%NAME%;
		}
*!

и связанный с ним код правила для простого токена:

tkIf 			= 'if'                          !*<token_info>*!

Здесь - первая строка

!<%NAME%> %CODE%

задает вид правой части: <token_info>. В данном случае %NAME%=token_info, %CODE% - пустой