Изменения

Перейти к навигации Перейти к поиску

ТОМ2: функции

5980 байт добавлено, 22:32, 14 мая 2013
Новая: {{содержание справа}} '''ТИПЫ ФУНКЦИЙ В ТОМ2''' Строка кода (команды) в ТОМе обрабатывается в 2 этапа: # Пар...
{{содержание справа}}
'''ТИПЫ ФУНКЦИЙ В ТОМ2'''

Строка кода (команды) в ТОМе обрабатывается в 2 этапа:
# Парсинг
# Выполнение строки
Вычисления и выполнение различных [[ТОМ2:_секции#.D0.A1.D0.B5.D0.BA.D1.86.D0.B8.D0.B8_.D0.B2_.D1.84.D1.83.D0.BD.D0.BA.D1.86.D0.B8.D1.8F.D1.85 | секций функций]] могут происходить как на 1м, так и на 2м этапах. На этапе парсинга происходит перебор вариантов, поэтому код, участвующий в парсинге, может вызываться множество раз. Выполнение же строки происходит лишь при условии ее однозначного разбора и выполняется только 1 раз.

Любая строка, обработанная без ошибок, всегда возвращает значение, являющееся результатом её выполнения.

В программном языке ТОМ2 есть 3 типа функций:
* Выражения
* Действия
* Факты

Зачем нужно деление функций на три типа:

Разбор команд на естественном языке требует проведение вычислений уже на этапе парсинга, когда смысл строки еще не понятен. Для этого необходимо по разному обрабатывать функции изменяющие и не изменяющие состояние игры. Изменение состояния игры допустимо только после однозначного разбора строки.

== Expression (Выражение) ==
Выражения вычисляются на этапе разбора (парсинга) строки и ''не приводят к изменениям состояния игры''.

Выражения могут входить в состав других сложных выражений, фактов или действий.

В качестве результата возвращается вычисленное значение выражения. Если вся строка является одним выражением, то вычисленное значение будет финальным результатом всей строки.

'''Примеры выражений:'''
цвет стен
количество людей в комнате
некто, взявший 3 рубля
2 + 2
X + 3
X.type

'''Пример описания обработчика выражения:'''
// атрибуты
expression(attribute Atr, object Ob)
{ == parsing ==
if :Ob.key != :Atr.key then fail, "несогласовано"
Ok
== execute ==
if :Ob.:Atr then return :Ob
fail, "тут такого нет"
}

== Action (Действие) ==
???

Действия ''изменяют состояние игры''.

Действия не могут входить в состав других действий, фактов или выражений, за исключением условных конструкций.

На этапе парсинга определяется необходимое действие и подготавливаются его аргументы.

Выполнение действий происходит после однозначного разбора строки.

'''Примеры действий:'''
покрась стены в зелёный цвет
возьми 3 рубля
run test.txt

'''Пример описания обработчика действия:'''
action(иди act*Пф, location напр*Ап)
{ == check ==
if loc = напр then fail, "ты уже здесь"
if нельзя_пройти loc :напр then fail, "туда нет прохода"
Ok
== execute ==
goto :напр
}

== Fact (Факт) ==
Факты применяются в качестве условий или вопросов, а так же как утверждения:
Если цвет стен зеленый, то … // условие
Цвет стен зеленый? // вопрос
Цвет стен зеленый. // утверждение

Факты могут входить в состав логических выражений, а также как условия в состав условных конструкций.

На этапе парсинга строки происходит проверка факта. Результат проверки - всегда логическое значение. Для условий результат проверки влияет на дальнейшее выполнение условной конструкции, для вопросов результат проверки является финальным результатом строки, для утверждений результат не важен.

После однозначного разбора строки с утверждением происходит выполнение этого утверждения (в нашем примере стенам будет присвоен зелёный цвет). Выполнение утверждения ''изменяет состояние игры''.

'''Примеры фактов:'''
Цвет стен зеленый
в комнате 5 человек
X = 3

'''Пример описания обработчика фактов:'''
fact(нельзя_пройти, локация, локация)
{ == check ==
yes //по умолчанию никуда нельзя пройти
}


[[Категория:Документация ТОМ2]]
25
правок

Навигация