p4 language learning :Part 2
2.1 String literals
字符串文字(字符串常量)被指定为任意的8位字符序列,并用双引号引起来。P4不会对字符串进行任何有效性检查(即它不会检查字符串是否代表合法的UTF-8编码)。
注:UTF-8(8位元,Universal Character Set/Unicode Transformation Format)是针对Unicode的一种可变长度字符编码。它可以用来表示Unicode标准中的任何字符,而且其编码中的第一个字节仍与ASCII相容,使得原来处理ASCII字符的软件无须或只进行少部份修改后,便可继续使用。因此,它逐渐成为电子邮件、网页及其他存储或传送文字的应用中,优先采用的编码。
2.2 Naming conventions
P4提供了丰富的类型。
基本类型包括位字符串(bit-strings),数字(numbers)和错误(errors)。
也有内置类型来表示结构,例如解析器(parsers),管道(pipelines),操作(actions)和表(tables)。
用户可以基于这些构造新类型:结构(structures),枚举(enumerations),标头(headers),标头堆栈(header stacks),标头联合(header unions)等。
在其文档有以下约定:
1.内置类型使用小写字母书写,例如int <20>
2.用户定义的类型使用大写字母,例如IPv4Address
3.类型变量始终是大写字母,例如parser P <H,IH>(…)
4.变量不大写,例如ipv4header
5.常数以大写字母写成,例如CPU_PORT
6.错误和枚举以驼峰表示法编写,例如PacketTooShort
注:3.是类型的变量,而4.是普通变量,两者注意区别
2.3 P4 programs
p4program
: /* empty */
| p4program declaration
| p4program ';' /* empty declaration */
;
declaration
: constantDeclaration
| externDeclaration
| actionDeclaration
| parserDeclaration
| typeDeclaration
| controlDeclaration
| instantiation
| errorDeclaration
| matchKindDeclaration
;<