文档库 最新最全的文档下载
当前位置:文档库 › flex资料

flex资料

flex资料
flex资料

LEX介绍

LEX(Lexical Analyzer Generator)即词法分析器生成工具是1972年贝尔实验室的M.E.Lesk和E.Schmidt在UNIX操作系统上首次开发的。GNU同时推出了和LEX完全兼容的FLEX(Fast Lexical Analyzer Genrator)。下面用到的例子都是基于flex的。

LEX工作原理:

LEX通过对源文件的扫描,经过宏替换将规则部分的正则表达式转换成与之等价的DFA,并产生DFA的状态转换矩阵(稀疏矩阵);利用该矩阵和源文件的C代码产生一个名为int yylex()的词法分析函数,将yylex()函数拷贝到输出文件lex.yy.c中。函数yylex()以在缺省条件下的标准输入(stdin)作为词法分析的输入文件。

输入文件(扩展名为.l)

LEX

输出文件lex.yy.c

Lex源文件格式为:

定义部分

%%

规则部分

%%

用户附加的C语言代码

例1:

int num_chars=0,num_lines=0;

/*定义两个全局变量,一个及字符数,一个记行数.注意:该语句不能顶行*/

%%

\n ++num_chars++; ++num_lines;

. ++num_chars;

%%

int main()

{

yylex();

printf(“%d,%d”, num_chars,num_lines);

}

int yywrap()/*文件结束处理函数,当yylex()读到文件结束标记EOF时,调用该函数时会,用户必须提供该函数,否则会提示编译出错*/

{

return 1;//返回1表示文件扫描结束,不必再扫描别的文件

}

lex 的输入文件分成三个段,段间用%% 来分隔。由于必须存在一个规则段,第一个%% 总是要求存在

模式

LEX的模式是机器可读的正则表达式。

表意字符匹配字符

. 除换行外的所有字符

\n 换行

* 0 次或无限次重复前面的表达式

+ 1 次或更多次重复前面的表达式

? 0 次或1 次出现前面的表达式

^ 行的开始

$ 行的结尾

a|b a 或者b

(ab)+ 1 次或玩多次重复ab

"a+b" 字符串a+b 本身(C 中的特殊字符仍然有效)

[] 字符类

[^ab] 除a,b 外的任意字符

[a^b] a, ^, b 中的一个

[az] 从a 到z 中的任意字符

[a\-z] a,-,z 中的一个

[a-z] a, z 中的一个

匹配文件结束标记

表1 :简单模式匹配

在方括号([])中,通常的操作失去了本来含意。方括号中只保留两个操作,连字号(“ ”)和抑扬号(“ ^” )。当把连字号用于两个字符中间时,表示字符的范围。当把抑扬号用在开始位置时,表示对后面的表达式取反。如果两个范式匹配相同的字符串,就会使用匹配长度最长的范式。如果两者匹配的长度相同,就会选用第一个列出的范式。

定义部分

定义部分由c语言的代码、模式的宏定义和条件模式的开始条件说明等部分组成。其中C 代码由顶行的“%{”和“}%”引入,LEX扫描源文件时该部分将首先被拷贝到输出文件之中(去掉)“%{”和“}%”,在此可以定义必要的全局变量和包含模式处理时用到的外部函数的头文件,如:

%{

#include

int num_chars=0,num_lines=0;

%}

此外,在定义中出现的任何非顶行文字也将直接拷贝到输出文件中,可以利用这一规定了来定义C的全局变量。还有定义部分开可以加上C语言的注释/**/,该部分也将直接拷贝到输出文件中。

规则部分

规则部分是LEX源文件的核心,它包括一组模式和生成分析器识别相应模式进行处理的C 语言动作。格式如下:

C语言代码

模式1 动作1

模式2 动作2

模式3 动作3

。。。。

模式n 动作n

同定义部分一样,C语言代码也不能顶行书写,或则是用顶行的“%{”和“}%”所引用。这里可以定义输出的词法分析函数yylex()的局部变量。该部分一定出现在第一个模式之前。而每一个模式必须顶行书写,而模式对应的C语句必须和模式在一行。它们之间用白字符分割,若对应模式的C语句有多行,则可以用“{}”将这些C语句括起来。

用户代码部分

LEX对用户代码部分不做任何处理,仅仅将该部分拷贝到输出文件lex.yy.c的尾部。在此部分可定义对模式进行处理的C语言函数、主函数和yylex()要调用的yywrap()等。若用户在其它用户模块中提供了这些函数的定义,此部分可省略,则后两部分的%%可省略了。

yylex()函数的匹配原则

yylex()的函数原型为int yylex(void)。它被调用后,首先它检查全局文件指针变量yyin 是否有定义,如果是则设置将要扫描的文件为用户所定义的文件,否则设为标准输入文件stdin。接着利用yylex()所定义的DFA分析被扫描的文件,如果有唯一的模式与被扫描的字符串匹配,则执行该模式的动作;如果有多个模式可以匹配相同的输入串,则yylex()选择匹配最长输入串的模式;若多个模式串匹配相等的输入串,则选择最前的模式进行匹配。

例如:

%%

program printf(“%s\n”,yytext);/*模式1*/

procedure printf(“%s\n”,yytext);/*模式2*/

[a-z][a-z,0-9]* printf(“%s\n”,yytext);/*模式3*/

当输入串为“programming”时,模式1(匹配“program”)和模式3(“programming”)都匹配,但会选择匹配串长的模式3。当输入串为“program”时,因为模式1和模式3匹配的串长度相等故会选择模式1.

试验:在Linux操作系统(ubantu7.10版本)下装有flex和GCC编译器后:

1. 把例1的内容保存到lextest.l中;

2. 运行flex lextest.l; 这时生成了一个lex.yy.c文件;

3. 编译这个lex.yy.c ,用gcc lex.yy.c –o lexyy

4. lexyy

结果:会显示出来test.txt中的行数和字符数。

FLEX

什么是FLEX?它是一个自动化工具,可以按照定义好的规则自动生成一个C函数yylex(),也成为扫描器(Scanner)。这个C函数把文本串作为输入,按照定义好的规则分析文本串中的字符,找到符合规则的一些字符序列后,就执行在规则中定义好的动作(Action)。例如在规则中可以这样定义:如果遇到一个换行字符\n,那么就把行计数器的值加一。

Flex文件就是一个文本文件,内容包括定义好的一系列词法规则。文件的命名习惯上以小写字母l(L)来作为文件后缀。如果为了清晰,也可以用.flx或者.flex作为文件的后缀名。Flex文件完成后,就执行下列命令:

$ flex example.flex

这个命令执行后将生成一个C文件,默认文件名为lex.yy.c。这个C文件主要内容就是函数yylex()的定义。

如果要直接将这个文件编译成为一个可执行程序,还有一些要注意的地方。如果在Flex文件中没有提供main()函数的定义,那么这个C文件中不会有main()函数。此时单独编译这个C文件的时候,一定要加上-lfl的连接库参数;若提供了main()函数,就不必要提供这个连接库参数了。连接库libfl提供了一个缺省的main函数。缺省的main()函数中只是简单地调用yyflex()函数,而自己提供的main()函数则可以根据需要加入许多其他的处理代码。

Flex文件

词法规范定义文件给出了单词构成规则。词法文件在习惯上用字母l(即L的小写)来作为后缀。Flex文件由三个部分组成。或者说三个段。三个段之间用两个%%分隔。

定义段(definitions)

%%

规则段(rules)

%%

用户代码段(user code)

定义段(definitions section)

定义段包含着一些简单名字的定义(name definitions),旨在简化扫描器的规范。定义名

字的方法如下:

name definition

名字可以由字母或下划线开头,后跟零个或多个字母、数字、下划线、或短横线。名字的定义则从其后的第一个非空白字符(non-white-space)开始直到行尾。下面是一个例子,定义了一个名字DIGIT,其定义就是指一个数字,如下所示:

DIGIT [0-9]

当在后面引用这个名字时,用一对花括号({})括住该名字即可。它会被展开成一对圆括号括住的该名字的定义,即:

{name} 展开成(definition)

例如:

{DIGIT}+"."{DIGIT}*

就等价于:

([0-9])+"."([0-9])*

定义段中还可以加入启动条件(start conditions)的声明。顾名思义,启动条件就如同C语言中的条件编译一样,根据指定的启动条件去激活一条规则,并用这条规则去匹配读入的字符。关于启动条件,后面还有更详细的介绍。

规则段(rules section)

规则由模式(pattern)和动作(action)两个部分组成。模式就是一个正则表达式,FLEX加入了一些自己的扩展。而动作一般就是一些C语句。模式指出了一个单词是如何构成的,当分析出一个符合该规则的单词时,就执行相应的动作。

模式一定要位于一行的开头处,不能有缩进。而动作的开头一定要与模式在同一行。当动作是用一对花括号{}括起来时,可以将左花括号放在与规则相同的行,而其余部分则可以从下一行开始。

用户代码段(user code)

所有用户代码都被原样拷贝到文件lex.yy.c中。在这里可以定义一些辅助函数或代码,供扫描器yylex()调用,或者调用扫描器(一般来说就是main()了)。这一部分是可有可无的。如果没有的话,Flex文件中第二个%%是可以省略的。

在定义段或者规则段中,任何一行有缩进的文本或者包含在一对%{和%}之间的文本,都被原样拷贝到最后生成的C代码文件中(当然%{和%}会被移走)。在书写时%{和%}都必须在一行的开始处,不能缩进。

在规则段中,第一条规则之前的任何未缩进的文本或者在%{和%}之间的文本,可以用来为扫描器声明一些本地变量和代码。一旦进入扫描器的代码,这些代码就会被执行。规则段内其他的缩进的文本或者%{和%}之间的文本还是被原样拷贝输出,但是他们的含义是尚未有明确定义,很可能引起编译时(compile-time)错误(这一特性是为了与POSIX兼容而提供的)。

在定义段中,没有缩进的注释也会被原样拷贝到最后生成的C代码文件中,例如以/*开始的一行注释,直到遇到*/,这中间的文本会被原样拷贝输出。

模式及其分类

模式采用正则表达式来书写。正则表达式大致可以分为如下几类(从上到下,优先级依次递减):

(1)单字符匹配

* …x? 匹配字符x。

* ….? 匹配任意一个字符(字节),除了换行符。

* …[xyz]? 匹配单个字符,这个字符是方括号中给出的字符类(character class)中的一个。

* …[abj-oZ]? 匹配单个字符,这个字符是方括号中给出的字符类中的一个。与上一方式的区别是指定字符类时用到了一个范围表示法:j-o,这表示按照26个英文字母的顺序,从字母j开始一直到字母o共6个字母。这里减号(-)表示范围。如果减号本身也要作为一个匹配字符时,最好用转义字符(\)去除其特殊含义。由于花括号({})在模式中用来引用名字,以及作为模式定义之后的动作(Action)定义块的首尾界定符,因此如果要在字符类中匹配花括号,必须用转义字符(\)去除其特殊含义。下面这个例子定义了一个所有可打印字符的字符类:

[[:alnum:][:blank:]]\t+\-*/&!_'?@^`~$\\()%|.;[\]\{\}:,#<>=]

* …[^A-Z]? 匹配单个字符,这个字符必须是方括号中给定字符类以外的字符。在方括号内开始处的特殊符号(^)表示否定。当字符^不在字符类的开始处时,并不具有特殊含义,而是一个普通字符。

* …[^A-Z\n]? 匹配单个字符,这个字符不可以是方括号中给出的字符类中的字符。与上一方式的不同在于,这里多了一个换行符,也就是说所匹配的字符不能是26个大写字母,也不能是换行符。

根据上面的描述,在表达字符分类时,除了直接用字符以及字符范围来表达外,还有一种叫做字符类表达式的,也有同样的作用,常见的一些表达式如下:

[:alnum:] [:alpha:] [:blank:] [:cntrl:] [:digit:] [:graph:]

[:lower:] [:print:] [:punct:] [:space:] [:upper:] [:xdigit:]

每一个表达式都指示了一个字符分类,而且其名称与标准C函数isXXXX的名字对应。例如,[:alnum:]就指示了那些经由函数isalnum()检查后返回true的字符,也就是任何的字母或者数字。注意,有些系统上没有给出C函数isblank()的定义,所以flex自己定义了[:blank:]为一个空格或者一个tab。

下面所举的几个例子,都是等价的:

[[:alnum:]]

[[:alpha:][:digit:]]

[[:alpha:]0-9]

[a-zA-Z0-9]

应该注意字符类表达式的写法。一个字符类表达式是由一对[:和:]包住的,作为一个整体,在书写时不可与外层的[]混淆。

(2)重复模式的匹配

* …r*? r是一个正则表达式,特殊字符`*'表示0个或多个。因此这个模式表示匹配0个或多个r。

* …r+? r是一个正则表达式,特殊字符`+'表示1个或多个。因此这个模式表示匹配1个或多个r。

* …r?? r是一个正则表达式,特殊字符`?'表示0个或1个。因此这个模式表示匹配0个或1个r。(从另一个角度看,就是说模式r是可选的)

* …r{2,5}? r是一个正则表达式,{2,5}表示2个到5个。因此这个模式表示匹配2个到5个r。也就是说可以匹配`rr',`rrr',`rrrr',`rrrrr'四种重复的模式。

* …r{2,}? r是一个正则表达式,{2,}省略了第二个数字,表示至少2个,不设上限。因此这个模式表示匹配2个及以上个r。也就是说至少可以匹配`rr',还可以匹配`rrr',`rrrr'等无限多种重复的模式。

* …r{4}? r是一个正则表达式,{4}只有一个数字,表示4个。因此这个模式确切地匹配4个r,即`rrrr'。

(3)名字替换

* …{name}? 这里name就是在前面的定义段给出的名字。这个模式将用这个名字的定义

来匹配。

(4)平凡(plain)文本串的匹配

* …“[xyz]\″foo”? 这个模式用来确切地匹配文本串:[xyz]\″foo。注意最外层的单引号所包含的是整个模式表达式,也就是说,当希望匹配字串[xyz]\″foo时,在书写规则时该字串必须用双引号括住。

(5)特殊单字符的匹配

* …\x? 当x是一个`a',`b',`f',`n',`r',`t'或`v'时,它就解释为ANSI-C中的\x。否则就仍然作为一个普通字符x(一般用于诸如`*'字符的转义字符)。

* …\0? 匹配一个NUL字符(ASCII码值为0)。

* …\123? 匹配一个字符,其值用八进制表示为123。

* …\x2a? 匹配一个字符,其值用十六进制表示为2a。

(6)组合模式的匹配

* …(r)? 匹配规则表达式r,圆括号可以提高其优先级。

* …rs? 匹配规则表达式r,其后紧跟着表达式s。这称为联接(concatenation)。

* …r|s? 或者匹配规则表达式r,或者匹配表达式s。

* …r/s? 匹配模式r,但是要求其后紧跟着模式s。当需要判断本次匹配是否为“最长匹配(longest match)时,模式s匹配的文本也会被包括进来,但完成判断后开始执行对应的动作(action)之前,这些与模式s相配的文本会被返还给输入。所以动作(action)只能看到模式r匹配到的文本。这种模式类型叫做尾部上下文(trailing context)。(有些…r/s?组合是flex不能识别的;请参看后面deficiencies/bugs一节中的dangerous trailing context的内容。)

* …^r? 匹配模式r,但是这个模式只出现在一行的开始处。也就是说,刚开始扫描时遇到的,或者说在刚扫描完一个换行字符后紧接着遇到的。

* …r$? 匹配模式r,但是这个模式只在一行的尾部。也就是说,该模式就出现在换行之前。这个模式等价于r/\n。注意,flex中的换行(newline)的概念,就是C编译器中所使用的\n,flex也采用同样的符号和解释。在DOS系统中,可能必须由你自己滤除输入中的\r,或者明确地在模式中写成r/\r\n来代替r$。(在unix系统中换行是用一个字节\n 表示的,而DOS/Windows则采用两个字节\r\n来表示换行。)

(7)有启动条件(Start Condition)的模式匹配

* …r? 匹配模式r,但需要启动条件s(后面后关于启动条件的讨论)。模式…r?是类似的,匹配模式r,只要有三个启动条件s1,s2,s3中的任一个即可。(启动条件简单来说,类似于C语言中的条件编译,满足了某个条件才启动这个模式参与匹配,否则不会启动该模式参与匹配。)

* …<*>r? 匹配模式r,在任何启动条件下都参与匹配,即使是排斥性的条件。

[上述还需要从实践中体会其含义]

(8)文件尾匹配

* …<>? 匹配文件尾,即遇到了文件尾部。一般说来,都应该在模式中加入文件尾模式。这样可以有机会在文件扫描完成时增加一些额外的处理。

* …<>? 在有启动条件s1或者s2的情况下,匹配文件尾部。

一些常见规则的编写(待续)

(1)双引号字符串。

[\"]({SAFECHAR}|{RESTCHAR}|[_])*[\"]

这里需要注意的地方是中间的重复模式的写法:(r)*。r可以是一个组合模式。中间的两个名称SAFECHAR和RESTCHAR是在定义段给出的两个字符类。

[此处应在实用中不断添加]

=========================================

创建一个简单的扫描器

下列例子来自于Flex的手册。并在Windows+Cygwin+bison+flex+gcc的环境下编译运行。

(1) 编辑Flex语法文件。

/* name: example.flex */

int num_lines = 0, num_chars = 0;

%%

\n ++num_lines; ++num_chars;

. ++num_chars;

%%

int main()

{

yylex();

printf("# of lines = %d, # of chars = %d\n", num_lines, num_chars);

return 0;

}

(2) 生成扫描器的C文件。

$ flex example.flex

The output is lex.yy.c

(3) 编译生成的C文件。

编译时失败,出现了如下的问题:

# gcc -g -Wall -lfl -o scan lex.yy.c

lex.yy.c:959: warning: 'yyunput' defined but not used

/cygdrive/c/DOCUME~1/ADMINI~1.78B/LOCALS~1/Temp/ccHwCWNb.o: In function `main':

/cygdrive/c/home/sandbox/flex_exam_1/example.l:9: multiple definition of `_main'

/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../libfl.a(libmain.o):(.text+0x0): first defined here

/cygdrive/c/DOCUME~1/ADMINI~1.78B/LOCALS~1/Temp/ccHwCWNb.o: In function `yylex':

/cygdrive/c/home/sandbox/flex_exam_1/lex.yy.c:692: undefined reference to `_yywrap'

/cygdrive/c/DOCUME~1/ADMINI~1.78B/LOCALS~1/Temp/ccHwCWNb.o: In function `input':

/cygdrive/c/home/sandbox/flex_exam_1/lex.yy.c:1041: undefined reference to `_yywrap'

collect2: ld returned 1 exit status

上述消息指出两个问题:

(1)函数yywrap没有定义。

(2)自定义函数main与连接库fl中的定义冲突了。

第一个问题的解决办法是在第一段(定义段)中加上一个选项指令:

%option noyywrap

第二个问题的解决办法就是用gcc编译时不连接fl库,如下所示:

# flex example.flex

# ls

example.flex lex.yy.c

# gcc -g -Wall -o scan lex.yy.c

lex.yy.c:977: warning: 'yyunput' defined but not used # ls

example.flex lex.yy.c scan.exe

# ./scan.exe

789

234

345# of lines = 2, # of chars = 11

修改过的代码如下:

%option noyywrap <==== 防止出现yywrap的问题

%{

int num_lines = 0, num_chars = 0;

%}

%%

\n ++num_lines; ++num_chars;

. ++num_chars;

%%

int main()

{

yylex();

printf("# of lines = %d, # of chars = %d\n",

num_lines, num_chars);

return 0;

}

更改扫描器yylex()的名字

我们还可以更改Flex自动生成的词法分析函数yylex()的名字、参数以及返回值,也就是说yylex这个名字仅仅是一个默认的名称,是可以改成其他名称的。方法很简单,只需要对宏YY_DECL做一个重定义即可:

#define YY_DECL float lexscan (float a, float b)

上述的宏定义就表明:当运行Flex生成C代码时,词法分析函数的名字叫做lexscan(不再是yylex了),有两个浮点型参数a和b,函数的返回值是浮点型。

如果与Bison联用的话,还是不要更改的好,因为Bison要求词法分析函数的名称是yylex。[应该也是可以改的,但其实际的方法还需在实践中得来。]

词法分析函数yylex()会使用全局变量yyin读取字符。

一些思考

(1)在H248协议的BNF文本中,需要分析很多的数字,有十六进制的,有十进制的,有长的数字也有短的数字。虽然在H248协议看来,各种不同的数字有着不同的意义,但是在Flex词法扫描器看来,它们有什么不同呢?特别是同样的一个0xab这样的只有两位数字的十六进制数,在H248协议和BISON看来,其有不同的含义和类型,但是在Flex 看来却没有什么不同。假设Bison分别将其定义为Token_A和Token_B,那么当Flex 分析出这么一个单词时,返回给Bison的数字类型是A还是B?

(2)在H248协议中,有一种表达式是由多个参数组成的,其中每个参数至多出现一次,且参数间次序是任意的。此外其中有两个参数是必须的。这种情况下如何给出Bison文法规则定义呢?

文法分析概览

利用BNF写出的文法规则,可以用来对输入的文本进行文法分析。一条BNF文法规则,左边是一个非终结符(Symbol或者non-terminal),右边则定义该非终结符是如何构成的,也称为产生式(Production),产生式中可能包含非终结符,也可能包含终结符(terminal),也可能二者都有。在所有文法规则中,必有一个开始的规则,该规则左边的部分叫做开始符号(start symbol)。一个规则的写法如下:

Symbol := Production

下面是一个BNF文法定义的例子。FN是fractional number的意思,DL是digit list的意思,S是start symbol。

S := '-' FN | FN

FN := DL | DL '.' DL

DL := D | D DL

D := '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'

一个非终结符可能有多个产生式,相互间用竖线(|)隔开。

每一条BNF产生式,都有自己的启动集(start set)。启动集里的元素就是每个Production 中的第一个部分,比如上例S规则的启动集就是{'-'}以及{FN}。

利用BNF文法来分析目标文本,其分析方法比较流行的有几种,下面作一概述[Garshol 03]。

LL(k)分析

LL分析又称为自顶向下的分析(top-down parsing),也有叫递归下降分析(recursive-descent parsing)。也是最简单的一种分析方式。它工作的方式类似于找出一个产生式可以从哪一个终结符开始。

当分析时,从起始符号开始,比较输入中的第一个终结符和启动集,看哪一个产生式规则被使用了。当然,两个启动集之间不能拥有同一个终结符。如果有的话,就没有办法决定选择哪个产生式规则了。

Ll文法通常用数字来分类,比如LL(1),LL(0)等。这个数字告诉你,在一个文法规则中的任何点可以允许一次察看的终结符的最大数量。LL(0)就不需要看任何终结符,分析器总是可以选择正确的产生式规则。它只适用于所有的非终结符都只有一个产生规则。只有一个产生规则意味着只有一个字符串。[不用看当前的终结符是什么就可以决定是哪一个产生规则,说明这个规则是为一个固定的字符串所写的。]这种文法是没有什么意义的。

最常见也是比较有用的事LL(1)文法。它只需要看一个终结符,然后就可以决定使用哪一个产生规则。而LL(2)则可以查看两个终结符,还有LL(k)文法等等。对于某个固定的k值,也存在着根本不是LL(k)的文法,而且还很普遍。

下面来分析一下本章开头给出的例子。首先看下面这条规则:

D := '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'

上述规则有十个产生式,每个产生式的启动集是一个数字终结符构成的集合{'0'}、{'1'}、……、{'9'}。这是一个很好的LL(1)文法,因为我们只要看一个终结符,就可以选择一个正确的产生式。例如,如果看到一个终结符,其内容是3,那么就采用上面第四个产生式,即D := '3'。

接下来分析DL规则。

DL := D | D DL

上述规则有两个产生式,启动集是{D},{D}。很不幸,两个产生式的启动集相同。这就表示只看第一个输入中的第一个终结符不能选择正确的产生式。

然而可以通过欺骗来绕过这个问题:如果输入中第二个终结符不是一个数字,那么就选择第一个产生式,但如果两者都是数字就必须选择第二个产生式。换句话说,这意味着这是一条好的LL(2)文法规则。实际上这里有些东西被简化了。

再分析下FN规则吧。它的情况更糟糕。

FN := DL | DL '.' DL

它有两条产生式,而且启动集相同,均为{DL}。然而这次不像DL规则那么幸运了。咋一看,似乎通过LL(2)可以分辨应该使用哪一个产生式。但是很不幸,我们无法确定在读到终结符('.')之前,需要读多少个数字才算是DL符号的最后一个数字。[想想吧,分析器这么工作着:读入第一个终结符,一看是相同的DL符号,那么就读第二个终结符吧;读入第二个终结符,两者合起来一看,还是一样的DL符号;读入第三个终结符,前三个终结符合起来看,仍然是相同的DL符号。但是DL符号表指示数字表示没有长度限制的。]没有任何一个给定的k值,这都不符合LL(k)文法,因为数字表总能突破这个k的长度。

最后看看启动符号规则。有点意外,它产生规则的选择很简单。

S := '-' FN | FN

它有两个产生规则,两者的启动集是{'-'}和{FN}。因此,如果输入中第一个终结符是'-',那么就选择第一个产生式,否则选择第二个产生式。所以这是一个LL(1)文法。

从上述的LL分析看,只有FN和DL规则引起了问题。但是不必绝望。大部分的非LL(k)文法都可以容易地转换为LL(1)文法。下面以当前的这个例子来看看如何转换有问题的FN 和DL。

对于FN符号来说,它的两个产生式都开始于DL,但是第二个产生式其后续的是一个小数点终结符('.'),以及另外一个数字表。那么这很容易解决:可以将FN改变为一个产生式,其以DL开始,后跟一个FP(fractional part)符号。而FP符号则定义成或者为空,或者为小数点后跟着一个数字表,如下所示:

FN := DL FP

FP := @ | '.' DL

上述@符号表示为空。现在FN文法没有任何问题了,因为它现在只有一个产生式。而FP 也不会有问题,因为它的两个产生式的启动集是不同的:前者是输入的尾端,后者是小数点终结符。

DL符号就不是好啃的核桃了,原因在于其递归和至少需要一个D符号。解决方案就是,给DL一个产生式,由一个D后跟一个DR(digit rest)构成;而DR则有两个产生式,一个是D DR(表示更多的数字),一个是@(表示没有更多的数字)。最后本章开头的例子被转换成下面的一个完全的LL(1)文法了:

S := '-' FN | FN

FN := DL FP

FP := @ | '.' DL

DL := D DR

DR := @ | D DR

D := '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'

LR分析

Lr分析也叫自底向上的分析(bottom-up parsing),或者叫移进-归约分析(shift-reduce parsing),相比LL分析难度更大些。它的基本原理是,首先收集输入,直到它发现可以据

Proflex PCR System使用说明书

USER GUIDE For Research Use Only. Not for use in diagnostic procedures. ProFlex ? PCR System User Guide Installation, Use, and Maintenance for use with: PCR reagents from Invitrogen ? and Applied Biosystems ?Catalog Number 4483636, 4483637, 4483638, 4484071, 4484073, 4484074, 4484075, 4484076, 4484078,4484072, and 4484077 Publication Number MAN0007697 Revision A.0

For Research Use Only. Not for use in diagnostic procedures. The information in this guide is subject to change without notice. DISCLAIMER LIFE TECHNOLOGIES CORPORATION AND/OR ITS AFFILIATE(S) DISCLAIM ALL WARRANTIES WITH RESPECT TO THIS DOCUMENT, EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THOSE OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. TO THE EXTENT ALLOWED BY LAW, IN NO EVENT SHALL LIFE TECHNOLOGIES AND/OR ITS AFFILIATE(S) BE LIABLE, WHETHER IN CONTRACT, TORT, WARRANTY, OR UNDER ANY STATUTE OR ON ANY OTHER BASIS FOR SPECIAL, INCIDENTAL, INDIRECT, PUNITIVE, MULTIPLE OR CONSEQUENTIAL DAMAGES IN CONNECTION WITH OR ARISING FROM THIS DOCUMENT, INCLUDING BUT NOT LIMITED TO THE USE THEREOF. Important Licensing Information This product may be covered by one or more Limited Use Label Licenses. By use of this product, you accept the terms and conditions of all applicable Limited Use Label Licenses. Trademarks All trademarks are the property of Thermo Fisher Scientific and its subsidiaries unless otherwise specified. AmpliTaq and AmpliTaq Gold are registered trademarks of Roche Molecular Systems, Inc. Clorox is a registered trademark of The Clorox Company, Bio-Rad, MyCycler, and C1000 Touch are trademarks of Bio-Rad Laboratories, Inc. Eppendorf, Mastercycler, and MJ Research are trademarks of Eppendorf AG. ?2014 Thermo Fisher Scientific Inc. All rights reserved.

Flex打印问题

Flex打印问题 使用两个类解决打印问题:FlexPrintJob和PringDataGrid。 ? FlexPrintJob。这个类需要在实例化之后用作要打印对象的容器。 ? PringDataGrid。是DataGrid的一个子类,用来打印必须以网格或表格形式显示的数据,支持多页面打印。 简单的打印实例: < ?xml version="1.0" encoding="utf-8"?> < mx:Application xmlns:mx=https://www.wendangku.net/doc/3d13045182.html,/2006/mxml layout="absolute"> < /mx:Application> 见源代码:printDemo.mxml。 创建单独的Print容器: < ?xml version="1.0" encoding="utf-8"?> < mx:Application xmlns:mx=https://www.wendangku.net/doc/3d13045182.html,/2006/mxml layout="absolute" creationComplete="bookDataCall.send()">

申报资料的补充说明演示教学

附件1 申报资料的补充说明 本文所列的申报资料内容要点的补充说明为通用要求。对于具体品种,可根据实际情况,及依据有关法规和指导原则选择适用的部分,不适用的项目和内容可不列出。本说明未尽事宜参照《化学药品新注册分类申报资料要求(试行)》以及相关管理规定办理。 一.药品名称 1、本项资料一般包括:通用名称、汉语拼音、英文名称、化学名称、化学结构式、分子式、分子量、曾用名、商品名、命名依据、药品名称查询情况(通用名称的查询情况及证明文件、商品名的查询情况及证明文件)。 2、药品的通用名称命名应当符合《中国药品通用名称》(国家药典委员会编)或国家药典委员会以其它方式确定的通用名称。自拟的药品通用名称,应符合药品通用名称命名原则,并提供在食药监总局网站数据库以中文和英文活性成分名称进行的药品通用名称查询记录,避免出现同名异物或同物异名的情况。复方制剂中各活性成分比例不同的,通用名称的命名应不同。在提交生产注册申请时,应提供经国家药典委员会核定的药品通用名称证明文件。创新药在申报临床试验阶段可以暂时以代号方式填报通用名称。 3、汉语拼音名称应当参照中国药典的格式编排,注意正确区分

字、词、字母大小写等。 4、在研发过程及各项资料中曾经使用的其他名称或代号,应在曾用名项下逐一列出。各项资料中所用的其他名称与所申报活性成分存在酸根或碱基等差异的,应详细作出说明。 5、化学药品新药在提出注册申请时,可以申请使用商品名,并可同时提出英文商品名。商品名应符合食药监总局发布的药品商品名称命名原则。申请使用商品名的,应当提供商标查询单(距药品注册受理日期半年内)或商标注册证。商标所有权人如非申请单位的,应当提供商标授权使用证明文件。商标注册受理通知书不能作为申请商品名的依据。 二.证明性文件 (一)本项资料一般包括: 1.申请机构资质证明文件 1.1境内申请人机构合法登记证明文件(营业执照或事业单位法 人证书复印件、组织机构代码证复印件等) 1.2 《药品生产许可证》正本及副本变更记录页复印件 1.3 《药品生产质量管理规范》认证证书复印件 1.4 申请人机构变更机构名称或地址等相关变更证明文件复印 件 2. 产品权属证明文件原件及技术转让合同复印件 3. 专利证明文件 3.1 申请的药物或者使用的处方、工艺、用途等专利情况及其权

职称申报材料补充说明与要求

2013年职称个人申报材料补充说明与要求 一、基本情况的填写(以下说明适用所有申报材料) 1、第一学历是指参加工作时的原始学历。第一学历不符合申报条件的,最高学历按本次申报时符合条件的成人学历填写;以成人学历申报中学高级教师职务人员,须提交河南省教育厅做的学历认证报告; 2、学历详情是指对应学历的毕业院校及专业; 3、时间填写格式必须统一,如:196907(评审简表可自动弹出的除外)。 二、《评审简表》 (一)、优质课等情况一栏填写时,应先按级别重要程度填写,同一级别的再按时间先后填写。填写格式统一如下: 200306 《三角形的性质》获河南省优质课一等奖,xxx字[ ]xxx号文件; 200405 《轴对称图形》获中原油田(濮阳市)优质课一等奖,xxx字[ ]xxx号文件; 时间、名称获奖等级、表彰文件文号等项目相应对齐,不能连续填写。 (二)、论文、论著及参编教材情况的填写,应先按发表论文、编写教材及获奖、交流论文分类,再依照每类中级别重要程度顺次填写。填写格式按《河南省职称信息系统软件》要求填写,并对应排列整齐。若发表或获奖论文、论著等材料过多,可只填写省部级以上的。 (三)、班主任工作参照上述要求填写。 (四)、教育教学获奖情况主要填写获教师节表彰情况,或其它教育教学业务类重要获奖情况。 (五)、以上各栏的填写内容不应交叉重复,同一获奖成果只能填写在某一栏。 (六)、其它与评审条件对照无关的业绩成果可以上报材料,但不必在《评审简表》显现。“填表人”一律由本校负责职改工作人员签署。 (七)、表中所填写的各种奖项要注明表彰文件的编号和证件。 三、年度考核 考核结果应根据学校平时考核情况如实填写,提供考核表原件。 四、有关情况证明 学校应为每个申报人统一出具以下材料:

flex开发环境配置手册

Flex开发环境配置手册 开发工具篇 一.开发工具 这里主要需要介绍的是两个Flex开发工具的环境配置 Micromedia Flex Builder 1.5 FlexBuilder 2.0 Eclipse 插件 二.Micromedia Flex Builder 1.5环境配置 1.安装Micromedia Flex Builder 1.5 安装部分比较简单,基本上和其他的Windows软件安装差不多,这里不做详细介绍。 2.配置开发环境 Flex Builder开发工具总体预览如下 图1 总体预览 OK,上面是配置完成的Flex Builder的开发环境预览,下面我们开始进入配置介绍,在这之前请先阅读Flex开发环境配置手册----服务器篇。因为这里使用的服务器是在服务器篇中介绍的布局,所以建议最好先阅读服务器篇。 a)新建Flex站点 首先我们需要在Flex Builder中为我们的Flex项目构建一个站点,我这里假设其站点名称为genifyFlex,并在服务器的发布目录下新建一个genifyFlex目录,当然这个名称你可以选取自己喜欢的名称。在Flex Builder的菜单栏Site New Flex Site中配置项目站点,如下所示: 图2 新建Flex站点01

图3 新建Flex站点02 Site name:Flex项目使用的站点名称。 Local root folder:项目源文件放置位置。 Flex server root folder:服务器篇中安装的Flex 1.5的目录(注意这个不是Flex Builder的目录)。 URL prefix:用户访问时使用的URL前缀,在项目开发过程中对源文件进行调试时Flex Builder生成的访问路径的前缀也使用该前缀。 b)站点配置 这里可以在上面的More Settings链接对站点进行更加详细的配置,也可以在Flex Builder的菜单栏Site Manage Sites进行站点的详细配置 图4 配置Flex站点01 图5 配置Flex站点02 在这里我们选择Edt对站点的一些信息进行详细配置,当然我们也可以在这里建立站点或者导入导出站点信息,这些不是我们这里的重点。 通过基本配置向导(Basic)可以完成对站点的基本信息的配置。 步骤一: 配置站点名称,如果项目的源文件是放置在本地的,这里只需键入站点名称即可,如果源文件是放在服务器上的,并且通过FTP或RDS来连接到服务器的,需要建立相应的连接,详细信息参见在线帮助文档。我们这里使用本地目录,因此这里只需键入站点名称

Flex与Twaver资料

TWaver Flex数据模型 TWaverFlex的基本数据元素是twaver.IData,基本数据容器定义为twaver.DataBox,基于这两类基本元素,TWaverFlex预定义了一系列业务对象,视图网元和管理容器,例如告警(twaver.IAlarm)和告警容器(twaver.AlarmBox),图层(twaver.ILayer)与图层管理容器(https://www.wendangku.net/doc/3d13045182.html,yerBox),拓扑网元(twaver.IElement)和拓扑管理容器(twaver.ElementBox)...... 数据元素结构图 数据管理容器结构图 其中拓扑管理容器(twaver.ElementBox)整合了其他几种容器,提供了丰富的拓扑元素(Dummy, Node, Link, Bus, ShapeNode, ShapeLink, Follower, Rack, Shelf, Slot, Card, Port, Grid, Group, SubNetwork......),为网管界面开发提供了强大的设计模型和业务功能的基础支持。 TWaver Flex数据元素 TWaverFlex以twaver.IData为最基本的数据单元,扩展定义了一系列具有图形和业务意义的数据类型,包括IAlarm, ILayer, IElement... twaver.IData

IData是TWaverFlex的数据元素基类接口,twaver.Data是对其实现类,定义了id, name, icon, toolTip, parent, children等基本属性,对事件派发做了封装,并支持xml数据的导入导出,为TWaver各平台间数据的可序列化奠定了基础。 Data继承于flash.events.EventDispatcher,这使他具有事件派发和监听的功能,可以通过调用下面的方法派发事件或者添加实现监听器: flash.events.EventDispatcher#public dispatchEvent(event:Event):Boolean flash.events.EventDispatcher#addEventListener(type:String, listener:Function, useCapture:Boolean=false, priority:int=0, useWeakReference:Boolean=false):void Data还实现了twaver.IData接口,实现了对属性变化事件的派发和监听 function dispatchPropertyChangeEvent(property:String, oldValue:Object, newValue:Object):Boolean; function addPropertyChangeListener(listener:Function, priority:int = 0 , useWeakReference:Boolean = false):void; function removePropertyChangeListener(listener:Function):void; 此外,Data中还定义了其他功能函数 function get childrenCount():int; function get hasChildren():Boolean; function isDescendantOf(data:IData):Boolean; function isParentOf(data:IData):Boolean; function isRelatedTo(data:IData):Boolean; function toXML(context:XMLContext, newInstance:IData):void; function parseXML(context:XMLContext, xml:XML):void; function setPropertyValue(property:String, value:Object):void; function getPropertyValue(property:String):Object; 下面分别介绍各个实现类 twaver.ILayer

山屋惊魂 规则补充说明.doc

山屋惊魂规则补充说明4 《山屋惊魂》卡牌补充说明 A.房间卡(ROOM TILES) 【1】HOW TO DISVOCER A ROOM(探索规则):a)摆放对应楼层的房间且不可使楼层封闭(没有供新房间连接的门),否则重新找一个对应楼层的房间进行摆放,若没有则尽可能小幅度地调整现有房间(注意魔梯移动到只剩一个可连接门的楼层就会使楼层封闭,此时魔梯停在原处,不进行移动);b)若门靠着别的房间的墙壁,则为假门,不可通过;同理,窗户另一侧如果是墙壁,则算作假窗户,除非作祟(THE HAUNT)剧情有要求,否则假窗户判定为没有窗户;c)探索进入新房间时,先按图标抽取卡片进行对应动作,再执行房间的规则,即使你因抽取卡牌而停止行动,你仍可在房间里进行其他行动,比如使用物品;d)因剧本等其他原因揭开和放置的房间,第一个进入的人不需要进行抽卡,当因房间和卡牌的因素导致如探索般进入新房间则需要抽卡并执行新房间的规则(如有) 【2】MENAGERIE(兽栏)和STUDY(书房):这两间房间中文描述错误,“受到1点肉体/精神损伤”应该更正为“肉体/精神能力上升1个级别”(原文:Once per game, if you end your turn here, put your explorer token here and gain 1 physical/metal trait) 【3】带有升降机符号(DUMBWAITER)的房间(共有7个):离开时,可以选择花费额外的一点速度来移动到相邻楼层

的台阶处(LANDING) 【4】CATACOMBS(陵墓)、TOWER(塔楼)、CHASM(缝隙):可选择原路直接返回;或者选择接受能力考验从另一侧离开(视为越过障碍,不消耗速度),但若考验失败,则立刻停止移动(不可再选择原路返回),要等到下个回合再次进行选择;怪物和奸徒不需要接受考验,直接通过,但若选择在这些房间结束回合,则需要指明是停留在哪一侧;由于卡牌效果等原因被动来到此类房间,自主选择到达哪一侧,若你的到达需放置方形标志(square tokens),则标志将永久固定在你选择到达的那一侧 【5】CATACOMBS(陵墓)、TOWER(塔楼)、CHASM(缝隙):从两侧门进来的人,被认为同房不同侧,不可以发动袭击或互动,除非某一方先通过能力考验来到了另一侧,或者持有Revolver(手枪)的人可在TOWER(塔楼)或CHASM(缝隙)中发动远程袭击【CATACOMBS(陵墓)两门中间根据图片被视为有墙壁隔开】 【6】V AULT(保险库):无论何种原因进入该房间,只会出现在被锁大门外的区域;只要有人通过考验打开保险库门,则放置空荡荡标志(the square Vault Empty token)于其中,奸徒亦需通过考验才可以开门 【7】CATACOMBS(陵墓)、TOWER(塔楼)、CHASM(缝隙)和V AULT(保险库)统称为“有障碍的房间”(Barrier Rooms) 【8】CHAPEL(礼拜堂)、LARDER(食品储藏库)、GYMNASIUM(健身房)、LIBRARY(图书馆)、MENAGERIE (兽栏)和STUDY(书房):整场游戏,每个角色只能从每个房

www.manuallib 飞利浦 REMstar Auto A-Flex 用户手册

REMstar Auto A-Flex USER MANUAL

? 2010 Koninklijke Philips Electronics N.V. All rights reserved.

T able of Contents Intended Use (2) Important (2) Warnings (2) Cautions (3) Contraindications (3) Symbol Key (3) System Contents (4) System Overview (4) Control Buttons (5) Available Therapies (5) Installing the Air Filters (6) Connecting the Breathing Circuit (6) Where to Place the Device (6) Supplying AC Power to the Device (6) Navigating the Device Screens (7) Starting the Device (7) Ramp Feature (8) Mask Fit Check Feature (8) Flex Screen (8) Setup Screen (9) Info Screen (10) Device Alerts (12) T roubleshooting (15) Accessories (16) T raveling with the System (17) Cleaning the Device (17) Cleaning or Replacing the Filters (17) Cleaning the T ubing (17) Service (17) Specifications (18) Disposal (20) How to Contact Respironics (20) Limited Warranty ...................................................................................................................................Back Page

flex4.0标签

Flex 4 读取xml文件,xml文件的格式: 根节点 叶子 信息 test-left test-middle fx:Binding可以使用 标签将某个对象的数据绑定到另一个对象。 可以使用 标签在 MXML 文件中定义内联单元格渲染器或单元格fx:Component 编辑器。 fx:Declarations可以使用 标签声明当前类的非默认、不可视属性。 可以在 标签内使用 标签定义图形子对象,然后fx:Definition 可以将子对象用于应用程序的其他部分中。 fx:DesignLayer 标签仅供内部使用。 fx:Library可以使用 标签声明当前类的非默认、非可视属性。 fx:Metadata使用 标签可以在 MXML 文件中插入 metadata 标签。 fx:Model可以使用 标签在 MXML 中声明数据模型。 fx:Private可以使用 标签提供有关 MXML 或 FXG 文档的元数据信息。 作为视图状态更改的一部分,可以使用 标签更改某个组件的父容fx:Reparent 器。 fx:Script可以使用 标签定义 ActionScript 代码块。 fx:Style可以使用 标签定义适用于当前文档及其子项的样式。 fx:XML可以使用 标签在 MXML 中声明 XML 格式的数据模型。 可以使用 标签在 MXML 中通过文本格式的模型创建 E4X XMLList fx:XML List 对象。 fx:Binding在使用标签时,需要提供源属性和目标属性。可以使用标签将视图或用户界面与模型完全分离。通过标签,您还可以将不同的source 属性绑定到同一个destination 属性。

Fitbit flex(one) 中文使用说明书

Fitbit flex 使用说明书(也适用于fitbit one) 下面提到的软件及APP,您可以在网盘下载 https://www.wendangku.net/doc/3d13045182.html,/share/link?shareid=2291433773&uk=4247811111 1.拿到机子,请检查配件,是否完整.(one 没有胶套,只有黑色绑带) 2.最好给主机先充电,以保证正常使用. 充电时指示灯会亮,一颗灯表示20%电量.

3.将flex与手机配对(以iphone4s为例) 注: ①所有配对和数据同步,必须在有网络的情况下进行(因为有云端数据备份). ②Flex支持电脑和智能终端同步,从方便的角度来说,首选智能终端. ③在配对和同步数据之前,我们先要注册一个fitbit的用户名,您需要输入,您的年龄,体 重,身高等数据,它可以记录你的健康状况.并且数据是备份在云端,永不丢失.(也可跳过这一步,直接在手机上注册) ⑴进入官网https://www.wendangku.net/doc/3d13045182.html,,在右上角的log in ⑵选择最下方的,free account. ⑶输入有效的邮箱,自己设的密码,输完以后,点击sign up.你就是fitbit大家族的一员了.

④注册好自己的用户名以后就可以配对了,flex支持ios中蓝牙 4.0设备 (iphone4s/5,ipad3/4/mini,touch5),安卓只支持三星S3,note2以后的机型(如果您的三星是行货,涉及到Root和刷机问题). 我们以iphone4s为例,开始: a.首先下载fitbit的APP.如果您的手机越狱,那么您可以在pp助手,91助手中下 载”fitbit”即可.如果没有越狱,那么您可以使用电脑端的pp助手安装,在pp助 手的”正版应用”中(但是不能在线升级软件) b.安装APP完毕后,打开手机的蓝牙功能(这里无需配对),进入APP,这里输入您刚才 注册的用户名,如果刚才您没有注册那么这里就选择”Get started”注册了. c.进入主界面后,进行配对.

Flex3.0面试题

1.as2与as3.的最主要区别是什么? 答:首先,as2和as3是完全不同的语言,几乎没有兼容性可言。as2编译用的AVM1虚拟机,as3用的AVM2,速度快,提供了一些基础异常处理。 as3是纯的OOP,强类型语言。as2不是。具体的差别有太多太多。 2.flex的开发框架有哪些,它们有什么优缺点? 答:最常见的当然是Cairngorm、Puremvc了,此外还有Mate,Swiz等等,据说被广泛应用的已经有10几款了。Cairngorm作为Adobe官方出品,有着贵族血统的它比较全面,是这些框架中已知bug最少的,但是基于他的应用相对臃肿复杂一些,需要对每个可以被触发的事件写一个对应的Command,编码量巨大,并且单元测试很不容易,不适合敏捷开发。Puremvc应该是现在用的最多的as 框架了。比较完善、并且与Cairngorm相比,更适合中小型应用的开发,它与Cairngorm一样,也是以MVC模式为中心,并以Fa?ade作为中央存储器的单件类的形式进行开发的。说下Mate,它是一个比较奇怪的框架,是基于标签的事件驱动型的。也就是说你不能再随意的写as类的,在使用Mate的情况下,只能用MXML来做这些事情。Swiz是Mate的孪生兄弟,长的挺像,没具体用过,不大了解。 3.在flex开发中,很多代码都写在mxml文件里,为了做到mvc模式,你是怎么处理的。 我认为mxml并不影响mvc模式啊。分两种情况来讨论,首先,是自己创建整个应用结构的时候,那我们可以手动将UI所在的mxml归为一类,然后由Mediator去操作或者说控制这些组件既可了,然后Mediator又统一交给Controller去操作。如果采用其他框架来进行开发的话,那就更不用来考虑这个问题了,像Cairngorm、Puremvc之类的框架已经很好的为我们解决了这些问题。只要按照它们的使用规范来进行开发,自然没有问题。 4.如果发生内存泄露,你是如何解决的? 在profile观察中已经内存泄漏是没有很好的解决办法的,至少我不知道,我能做的只是尽量去避免这种情况的发生,比如说注意不要循环引用,特别是在使用Timer的时候要格外注意,不要忘记全局对象上的引用的清除,在创建控制器和模型的时候要注意一定要使用单件模式。在addEventListener时候尽量采用弱引用、自引用、或者子对象引用,以避免内存泄漏。 5。as3.0垃圾回收器是如何工作的? flash player 8之前采用的是引用计数法,在flash player 8 之后用的是标记法,简单的说就是:从应用的根节点开始,遍历所有其上的引用,标记每个它所发现的 对象。然后迭代遍历每个被标记的对象,标记它们的子对象。这个过程第归进行,直到Player遍历了应用的整个对象树并标记了它所发现的每个东西。在这个过

2019年度申报高级教师材料补充说明

2019年度申报高级教师材料补充说明发布日期:2019-09-20 作者:人事科来源:宿州市教体局【字体: 大中小】阅读:6103次 为做好2019年宿州市中小学教师职称评审工作,根据安徽省人力资源社会保障厅、安徽省教育厅《关于深化安徽省中小学教师职称制度改革试点工作实施方案的通知》(皖人社发〔2016〕13号)、宿州市人社局《关于做好2019年度全市职称评审工作的通知》(宿人社秘〔2019〕164号)精神,结合我市实际,对照《安徽省中小学教师专业技术资格标准条件》的相关条款,制定本补充说明,供申报教师参考。 一、学历、资历方面 1.提供符合申报条件的学历证书、学位证书原件及复印件各1份。 2.提供中级职称(原中学一级、小学高级)的任职资格证书和聘用证书原件(或事业单位聘用合同书原件)及复印件各1份。 3. 提供符合申报条件的教师资格证书原件及复印件各1份。 4. 提供继续教育证书原件及复印件各1份,担任校长(含副校长)岗位的还应提供相应的岗位培训合格证书原件及复印件各1份。 5. 提供任现职(中级职称以来)以来年度考核为合格以上等次的证明(校长签字并加盖学校公章,同时在评审表中如实填写,由校长签字并加盖学校公章)。 二、能力条件方面 1.提供反映本人教书育人成果比较突出的实证材料(如经校长签字并加盖学校公章的个人教书育人成果书面总结材料、反映本人教书育人成果并加盖发布部门公章的相关数据和获奖证书等)。 2.提供一篇较高水平的反映本学科发展动态的行动报告或教育叙事(不少于3000字)。

3.提供体现完成规定的教育教学任务、工作量饱满的实证材料。 ①近五年来各学期课程表及出勤情况证明。 ②近五年来各学期教学计划。 ③经学校验证的上一学年原始、完整的教学设计,并从中自选2份最能反映本人水平和特色的典型课例。 以上各项材料均须校长签字并加盖学校公章。 4.提供从教以来,担任班主任等工作3年以上(其中任现职以来1年以上)的材料。 ①担任班主任工作的学校证明(校长签字并加盖学校公章)。 ②班主任工作经验总结材料1份。 ③证明班主任工作取得突出成绩的实证材料,如学校及以上主管部门颁发的获奖证书等。 ④没有担任班主任,可提供担任年级组长、教研组长、团委书记、少先队辅导员、课外活动小组负责人或兼任学校中层以上领导职务的上述三方面材料,年限要求同上。 5. 提供在指导青年教师方面发挥重要作用,取得明显成效的实证材料。 ①积极参加校本培训、校本教研活动:基本任期内(5学年,至少提供三学年6个学期),每学期听课指导及主持研讨不少于6节(次),每学期开设校内公开课不少于1节(次);基本任期内,开设校际公开示范课不少于2节(次)。须提供至少3学年6个学期的听课指导及主持研讨原始记录,校内校际公开课提供开课通知、原始教学设计及三位听课人原始评价意见(听课指导及主持研讨记录和校内公开课等材料须校长签字并加盖学校公章;校际公开课材料须由双方学校校长签字并加盖双方学校公章)。 ②任现职以来,指导青年获奖:辅导青年教师经验总结材料1份及所辅导的青年教师在县级以上教育部门主办的优质课等各类学科教学类评比活动中的获奖实证材料(须提供被辅导青年教师的获奖证书原件、由校长签字并加盖学校公章的辅导证明及青年教师本人的证明材料)。 6.提供支教方面的实证材料。

PowerFlex 40变频器用户手册

PowerFlex 40 Adjustable Frequency AC Drive PowerFlex 40变频器 User Manual 用户手册

重要用户信息 固态设备具有不同于电动机械设备的操作特性。 《固态控制器的应用、安装和维护安全指南》(出版号SG I-1.1,本资料可从当地的Rockwell销售办事处或https://www.wendangku.net/doc/3d13045182.html,/manuals/gi获得)说明了固态设备和硬接线电动机械设备之间的重要差别。由于这些差别的存在以及固态设备应用的多样性,因此所有技术人员有责任确保这些固态设备的每项应用是可行的。 罗克韦尔自动化公司绝不承担因使用该设备而引起的间接或灾后损失的责任或义务。 本手册所包含的例子和图表仅仅用于说明。因为任何特定安装有着特定的变化因素和需求,所以罗克韦尔自动化公司不承担用户基于例子和图表中实际应用的任何责任或义务。 关于本手册中所说明的信息、电路、设备或软件,罗克韦尔自动化公司不承担任何专利责任。 如果没有得到罗克韦尔自动化公司书面允许,严厉禁止任何团体、公司、个人对本手册的内容进行整体或部分复制。 我们使用了注释贯穿于本手册,提醒用户作安全考虑。本手册系根据英文原文版翻译而成。本手册中若有与英文不符之处,请以英文为准。 25 26 27 注意事项:是指有关导致人员伤亡、财产损害或经济损失的实际应用或 环境情况。 注意事项可以帮助用户 z识别危害 z避免危害 z认识危害所带来后果 重要事项:是指用户对有关产品正确理解和应用所需掌握的重要信息。 DriveExploer,Drive tools32和SCANport是罗克韦尔自动化公司的商标。 PLC是罗克韦尔自动化公司的登记注册商标。 ControlNet是ControlNet国际有限公司的商标。 DeviceNet是Open DeviceNet Vendor Association的商标。

JFLex用户手册中文版

JFLEX词法分析 安装与配置 1.下载jflex-1.4.3.zip,解压缩到本地目录(c:/jflex)。 2.找到jflex\bin\jflex.bat文件,配置JAVA HOME和JFLEX HOME 3.把x:\jflex\bin写入系统环境变量path中 运行 可视化方式 直接运行jflex\bin\jflex.bat文件,打开可视化界面操作即可。 命令行方式 配置 把x:\jflex\bin以及x:\jflex\lib\ JFlex.jar配置到系统环境变量的CLASSPATH中。 格式 java JFlex.Main 运行参数 -d 生成文件的输出目录 --skel 使用外部的骨架文件生成扫描器类,它大多数情况下用于JFLEX的维护和低级别定制。只有在你知道自己正在作什么时候才使用它。JFLEX的源码中带有一个骨架文件,预先编写骨架

文件才能使用此命令。 --nomin 在扫描器生成的过程中,跳过DFA简化步骤。 --jlex 完全兼容jlex --dot 为NFA, DFA and minimised DFA生成扩展名为.dot的graphviz图型文件。该参数还在最初阶段,尚未完全实现。 --dump 在控制台显示NFA转换表,初始DFA和最简DFA。 --verbose or –v 显示生成过程信息。 --quiet or –q 仅显示生成错误信息 --time 显示代码生成耗时信息(不十分精确) --version 打印JFLex版本号

flex开发规范文档

Flex开发规范 开发规范对可以使用项目中所有的文件进行统一,增加可读性,减少错误出现的几率。规范的编码减少人员变动带来的维护成本,可以让程序员尽快而彻底的理解新的代码。 为了方便维护,特定flex开发规范,每个人必须执行。 1.总体要求 所有As功能代码部分,每个方法需要有相应的注释。核心功能代码要求每个处理都要有注释。注释内容包括:方法功能用途,编写人,时间。 所有标签代码,需进行代码格式化。(myeclipse中的格式化)。 对于后期修改的代码,要注明为后期修改,并写明具体修改时间,修改人。 项目开发必须严格按照开发规范进行编写。 2.命名规则 2.1.项目结构及文件夹命名规则 文件夹命名需小写。除特殊运用框架的工程之外,项目中的文件目录结构应为: com >>assets 图片文件夹 >>common 常用组件文件夹 >>styles 样式文件夹 >>configs 配置文件夹 >>其他业务文件夹 2.2.类命名规则 类命名首字母需大写,取名需按照业务功能的字面意思进行取名。例如LoginPage。所有弹出页面均要加上XXXPop后缀。 2.3.配置文件命名规则 所有配置文件需按字面意思进行命名,首字母大写。例如MapConfig.xml。若文件是某个类专用读取属性于地址目录的配置文件,则要与该类同名。例如HireLine.mxml与HireLine.xml。

2.4.方法命名 除构造方法外,一般方法首字母需小写,后采用驼峰式命名方法,方法命名需体现方法功能。禁止方法名超长。标准应为如下:onMapClick():void, querryCarInfo():void, 2.5.类变量命名 变量命名需简短,明意。首字母需小写,并采用驼峰式命名方法。对于特定关键代码的变量命名后缀需与参照其类型名。例如集合与数组:messageArr。Object类为:infoObj。事件为:clickEvt。字符串为:querryStr等。 2.6.临时变量命名 尽量不与类变量同名,命名方法参照类变量,循环体内的自增变量需采用I,j,k,m,n,也可写成index。对于引用自定义类的变量,命名取该类型的缩写或取其名称的一部分。例如自定义类为CarInfoSearchPop,则变量名为cisp或carpop。 2.7.Bean命名 采用驼峰命名方法,命名需体现业务意思,以Bean结尾,例如:CarInfoBean。 2.8.Remote方法命名 Remote方法命名需与Java端方法同名。 2.9.标签命名 标签的命名所有字母都需大写 3.注释 3.1.类注释 因类包含mxml与纯class,所以均在script中进行注释。因项目中类较多,因此注释可简化为以下项: /**

词法分析器flex中文手册

FLEX 中文手册 这是flex手册的部分中文翻译,仅供参考 ?一些简单的例子 ?输入文件的格式 ?模式 ?如何匹配输入 ?动作 ?生成的扫描器 ?开始条件 ?文件结尾规则 ?与yacc一起使用 一些简单的例子 首先给出一些简单的例子,来了解一下如何使用flex。下面的flex输入所定义的扫描器,用来将所有的“ username”字符串替换为用户的登陆名字: %% username printf("%s", getlogin()); 默认情况下,flex扫描器无法匹配的所有文本将被复制到输出,所以该扫描器的实际效果是将输入文件 复制到输出,并对每一个“username”进行展开。在这个例子中,只有一个规则。“username”是模式 (pattern),“printf”是动作(action)。“%%”标志着规则的开始。 这里是另一个简单的例子: int num_lines = 0, num_chars = 0; %% \n ++num_lines; ++num_chars; . ++num_chars; %% int main(void) { yylex(); printf("# of lines = %d, # of chars = %d\n", num_lines, num_chars);

} 该扫描器计算输入的字符个数和行数(除了最后的计数报告,并未产生其它输出)。第一行声明了两 个全局变量,“num_lines”和“num_chars”,可以在yylex()函数中和第二个“%%”后面声明的main()函数中 使用。有两个规则,一个是匹配换行符(“\n”)并增加行数和字符数,另一个是匹配所有不是换行符的 其它字符(由正规表达式“.”表示)。 一个稍微复杂点的例子: /* scanner for a toy Pascal-like language */ %{ /* need this for the call to atof() below */ #include %} DIGIT [0-9] ID [a-z][a-z0-9]* %% {DIGIT}+ { printf( "An integer: %s (%d)\n", yytext, atoi( yytext ) ); } {DIGIT}+"."{DIGIT}* { printf( "A float: %s (%g)\n", yytext, atof( yytext ) ); } if|then|begin|end|procedure|function { printf( "A keyword: %s\n", yytext ); } {ID} printf( "An identifier: %s\n", yytext );

相关文档