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
Выбор File
, и %closefile
даны в Директивах компилятора Выходного языка.
Отсутствие явных описаний типа для переменных является другой функцией TLC. См. Компилятор Выходного языка для получения дополнительной информации о неявных типах данных переменных.
Одно из построений, наиболее относящихся к генерации кода от
файл является записью. record похож на структуру в C или запись в Паскале. Синтаксис объявления записиmodel
.rtw
%createrecord recVar { ... field1 value1 ... field2 value2 ... ... fieldN valueN ... }
где recVar
имя объявляемой записи, fieldi
строка и valuei
соответствующее значение TLC.
Записи могли вложить записи или подзаписи, в них.
файлом является по существу один большой именованный 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
Пока существует некоторая ссылка на запись через псевдоним, та запись не удалена. Это позволяет записям использоваться в качестве возвращаемых значений от функций.