TLC интерпретирует целевой язык, который является общим языком программирования, и можно использовать его как таковой. Важно, однако, помнить, что TLC был разработан для одной цели: преобразовать файл к сгенерированному коду. Таким образом, целевой язык предоставляет много функций, которые полезны для этой задачи, но не предоставляет некоторые функции, которые предоставляют другие языки, такие как C и C++.model.rtw
Можно найти некоторые из следующих примеров общего программирования, полезных для ознакомления с основными конструкциями, используемыми в TLC.
Типичный пример «Hello World» довольно прост на целевом языке. Введите следующее в файл с именем hello.tlc:
%selectfile STDOUT Hello, World
Чтобы запустить эту программу TLC, введите
tlc hello.tlc
в MATLAB® приглашение.
Этот простой скрипт иллюстрирует некоторые важные концепции, лежащие в основе цели (и, следовательно, проекта) TLC. Поскольку основной целью TLC является генерация кода, он ориентирован на вывод (или поток). Это облегчает обработку буферов текста и их легкий вывод. В приведенном выше скрипте %selectfile директива предписывает TLC отправлять любой следующий текст, который он генерирует или не распознает стандартному устройству выхода. Синтаксис, который распознает TLC, начинается со % символ. Потому что Hello, World не распознается, отправляется непосредственно на выход. Вы можете легко изменить место назначения выхода на файл. Не открывайте STDOUT поток, но выберите для записи в Командное окно.
%openfile foo = "foo.txt" %openfile bar = "bar.txt" %selectfile foo This line is in foo. %selectfile STDOUT Line has been output to foo. %selectfile bar This line is in bar. %selectfile NULL_FILE This line will not show up anywhere. %selectfile STDOUT About to close bar. %closefile bar %closefile foo
Можно переключаться между буферами для отображения сообщений о состоянии. Семантика трех директивных %openfile, %selectfile, и %closefile приведены в Директивах компилятора целевого языка.
Отсутствие явных объявлений типов для переменных является другой функцией TLC. Дополнительные сведения о неявных типах данных переменных см. в разделе Компилятора целевого языка.
Одна из конструкций, наиболее релевантных для генерации кода из файл является записью. record подобна структуре на C или записи на Pascal. Синтаксис объявления записи:model.rtw
%createrecord recVar { ...
field1 value1 ...
field2 value2 ...
...
fieldN valueN ...
}где recVar - имя объявляемой записи, fieldi является строкой, и valuei - соответствующее значение TLC.
Записи могут иметь вложенные записи или подзаписи в них. The файл по существу является одной большой записью с именем model.rtwCompiledModel, содержащего уровни подзаписей.
В отличие от MATLAB, TLC требует, чтобы вы явно функции load определения, не расположенные в том же целевом файле. В MATLAB линия A = myfunc(B) приводит к тому, что MATLAB автоматически ищет и загружает файл MATLAB или файл MEX с именем myfunc. TLC требует, чтобы вы специально включили файл, который определяет функцию, используя %addincludepath директива.
TLC обеспечивает %with директива, которая облегчает использование записей. См. «Директивы компилятора целевого языка».
Примечание
Формат и структура файл может быть изменен с одного релиза генератора кода на другую.model.rtw
Запись, считанная из файла, изменяется, как и другие записи, которые вы объявляете в программе. Запись CompiledModel изменяется много раз во время генерации кода. CompiledModel - глобальная запись в файл. Он содержит переменные, используемые для генерации кода, такие как model.rtwNumNonvirtSubsystems, NumBlocks. Он также добавляется во время генерации кода со многими новыми переменными, опциями и подзаписями.
Функции, такие как LibGetFormattedBlockPath предоставляются в библиотеках TLC, расположенных в (откройте). Полный список доступных функций см. в Ссылке по библиотеке функций TLC на целевом языковом компиляторе.matlabroot/ rtw/c/tlc/lib/* .tlc
Чтобы назначить значение полю записи, необходимо использовать qualified variable expression. Выражение квалифицированной переменной ссылается на переменную в одной из следующих форм:
Идентификатор
Квалифицированная переменная, за которой следует "."далее следует идентификатор, такой как
var[2].b
Квалифицированная переменная с последующим выражением в скобках, таким как
var[expr]
В TLC возможно создать то, что называется alias к записи. Псевдонимы аналогичны указателям на структуры в C. Вы можете создать несколько псевдонимов одной записи. Изменения псевдонима записи видны в каждом месте, содержащем псевдоним.
Следующий фрагмент кода иллюстрирует использование псевдонимов:
%createrecord foo { field 1 }
%createrecord a { }
%createrecord b { }
%createrecord c { }
%addtorecord a foo foo
%addtorecord b foo foo
%addtorecord c foo { field 1 }
%% notice we are not changing field through a or b.
%assign foo.field = 2
ISALIAS(a.foo) = %<ISALIAS(a.foo)>
ISALIAS(b.foo) = %<ISALIAS(b.foo)>
ISALIAS(c.foo) = %<ISALIAS(c.foo)>
a.foo.field = %<a.foo.field>
b.foo.field = %<b.foo.field>
c.foo.field = %<c.foo.field>
%% note that c.foo.field is unchangedСохранение этого скрипта как record_alias.tlc и вызов его с
tlc -v record_alias.tlc
формирует выход
ISALIAS(a.foo) = 1 ISALIAS(b.foo) = 1 ISALIAS(c.foo) = 0 a.foo.field = 2 b.foo.field = 2 c.foo.field = 1
Когда внутри функции можно создать псевдоним локально созданной записи, которая находится внутри функции. Если псевдоним возвращается из функции, он остается действительным даже после выхода из функции, как в следующем примере:
%function func(value) Output
%createrecord foo { field value }
%createrecord a { foo foo }
ISALIAS(a.foo) = %<ISALIAS(a.foo)>
%return a.foo
%endfunction
%assign x = func(2)
ISALIAS(x) = %<ISALIAS(x)>
x = %<x>
x.field = %<x.field>Сохранение этого скрипта как alias_func.tlc и вызов его с
tlc -v alias_func.tlc
формирует выход
ISALIAS(a.foo) = 1
ISALIAS(x) = 1
x = { field 2 }
x.field = 2Пока существует некоторая ссылка на запись через псевдоним, эта запись не удаляется. Это позволяет использовать записи в качестве возвращаемых значений из функций.