代码生成的概念
TLC解释目标语言,这是一种通用编程语言,您可以使用它。是很重要的,但是,要记住,薄层色谱是为一个目的:设计转换
文件生成的代码。因此,目标语言提供了许多特性,对于这个任务非常有用,但不提供其他语言的一些特点,像C和c++提供。模型
.rtw
下面你会发现一些通用的编程例子有用熟悉基本的构造中使用薄层色谱。
输出流
典型的“Hello World”示例非常简单的目标语言。输入以下文件中命名hello.tlc
:
% selectfile STDOUT你好,世界
这个薄层色谱程序运行,类型
tlc hello.tlc
在MATLAB®提示。
这个简单的脚本演示了一些重要概念基础的目的(以及设计)。由于薄层色谱的主要目的是生成代码,它是面向输出(或流)。它很容易处理文本缓冲区和输出很容易。在上面的脚本% selectfile
指令后告诉TLC发送任何文本生成或不承认到标准输出设备。语法,TLC承认开始的%
的性格。因为你好,世界
不承认,它是直接发送到输出。你可以很容易地改变输出的目的地是一个文件。不要打开STDOUT
流,但选择写命令窗口。
% openfile foo = " foo。三种“% openfile酒吧= "栏。这条线三种“% selectfile foo是foo。% selectfile STDOUT线输出foo。% selectfile酒吧这条线是在酒吧。% selectfile NULL_FILE这条线将不会出现在任何地方。% selectfile STDOUT关闭酒吧。% % closefile foo closefile酒吧
你可以切换缓冲区来显示状态消息。的语义三个指令% openfile
,% selectfile
,% closefile
给出了目标语言编译器指令。
变量类型
没有显式的类型声明为变量的另一个特点是薄层色谱。看到目标语言编译器有关变量的隐式数据类型的更多信息。
记录
结构的一个最相关的生成代码
文件是一个记录。一个记录类似于一个结构在帕斯卡C或记录。记录声明的语法模型
.rtw
% createrecord recVar {…field1 value1……field2 value2……fieldN家……}
在哪里recVar
记录的名称被宣布,fieldi
是一个字符串,然后呢valuei
是相应的TLC价值。
记录可以嵌套的记录,或subrecords,。的
文件实际上是一个大的记录,命名模型
.rtwCompiledModel
,包含subrecords水平。
与MATLAB, TLC要求您显式地加载函数定义不位于同一目标文件。在MATLAB中,线一个= myfunc (B)
使MATLAB自动搜索并加载一个MATLAB文件或MEX-file命名myfunc
。TLC要求您具体包括文件,定义了函数使用% addincludepath
指令。
TLC提供了一个%,
指示,便于使用记录。看到目标语言编译器指令。
请注意
的格式和结构
文件代码生成器的变化从一个版本到另一个地方。模型
.rtw
从文件读入记录是多变的,就像其他记录你在程序中声明。记录CompiledModel
在代码生成修改很多次。CompiledModel
全球记录吗
文件。它包含变量用于代码生成,如模型
.rtwNumNonvirtSubsystems
,NumBlocks
。也附加在代码生成许多新的变量,选择,和subrecords。
等功能LibGetFormattedBlockPath
提供了TLC库位于
(开放)。可用功能的完整列表,请参阅TLC函数库参考目标语言编译器。matlabroot
/ rtw / c / tlc / lib / * .tlc
给字段赋值的记录
分配一个值的字段记录,你必须使用一个合格的变量表达式。一个合格的变量表达式引用一个变量在下列形式之一:
一个标识符
其次是“一个合格的变量
。
”紧随其后的是一个标识符,比如var [2]。b
一个合格的变量一个括号表达式如紧随其后
var (expr)
记录的别名
在薄层色谱中,可以创建所谓的一个别名一个记录。别名是类似于c .指向结构的指针可以创建多个别名单个记录。修改别名记录对每个地方,可见一个别名。
下面的代码片段演示了使用别名:
% createrecord foo{字段1}% createrecord createrecord b {} {} % % createrecord c {} % addtorecord foo foo % b addtorecord foo foo % addtorecord c foo{字段1}% %注意我们不改变字段通过a或b。%分配foo。场= 2 ISALIAS (a.foo) = % < ISALIAS (a.foo) > ISALIAS (b.foo) = % < ISALIAS (b.foo) > ISALIAS (c.foo) = % < ISALIAS (c.foo) > a.foo。= % < a.foo领域。> b.foo领域。= % < b.foo领域。> c.foo领域。= % < c.foo领域。场> % %注意c.foo。字段是不变
这个脚本保存为record_alias.tlc
并调用
薄层色谱- v record_alias.tlc
生成的输出
ISALIAS (a.foo) = 1 ISALIAS (b.foo) = 1 ISALIAS a.foo (c.foo) = 0。= 2 b.foo领域。= 2 c.foo领域。场= 1
内部函数时,可以创建一个别名内本地创建的记录功能。如果从函数返回的别名,它仍然有效,即使退出功能,如以下示例:
%函数func(值)输出% createrecord foo{字段值}% createrecord {foo foo} ISALIAS (a.foo) = % < ISALIAS (a.foo) > %返回。foo % endfunction %分配x = func (2) ISALIAS (x) = % < ISALIAS (x) > x = x % < x >。场= % < x.field >
这个脚本保存为alias_func.tlc
并调用
薄层色谱- v alias_func.tlc
生成的输出
ISALIAS (a.foo) = 1 ISALIAS (x) = 1 x = x 2}{域。场= 2
只要有参考通过别名记录,记录没有删除。这允许使用记录,从函数返回值。