
#打卡不停更# [gn+ninja学习 0x06] gn构建文件的语言与语法 原创
[gn+ninja学习 0x06] gn构建文件的语言与语法
OpenHarmony使用gn+ninja来维护开源项目的构建。之前没有接触过gn+ninja,是时候系统性的来学习下了。边学边记录下学习过程,希望对同样需要学习gn+ninja的朋友有所帮助。
GN参考文档GN Reference包含命令、target声明、可以构建文件中使用的函数、内置预定义的变量、可以在target中使用的变量、以及其他帮助主题。由于内容非常多,学习起来非常耗费时间,可以先阅读掌握常用的命令、常用的target、常用的函数和变量等。其他内容可以在需要的时候再来查询学习。
这一篇,我们来学习下GN参考文档GN Reference中内容Language and grammar for GN build files,通过该文的学习来掌握编写GN构建文件的需要具备的知识。
1、 Tokens 标记
GN构建文件会被读取解析为标记系列。当把构建文件分割为一系列标记时,下一个标记是形成有效标记的最长字符串。
注:Token在计算机身份认证中是令牌(临时)的意思,在词法分析中是标记的意思。
White space and comments 空格和注释
构建文件中的空格包含空格符、制表符、回车和换行符。 注释以符号#开头,以换行结束。空格和注释会被忽略,除非用于分割标记。
Identifiers 标记符
标记符用于命名变量和函数,标记符由字母、数字、下划线组成,必须以字母和下划线开头。
Keywords 保留字
GN保留字有else、false、if和true。
Integer literals 整数文本
整数文本表示十进制整数值,不能数字0开头,不能出现负0。
String literals 字符串字面量
字符串字面量表示字符串值,由双引号包含的字符和可能的转义序列,变量扩展组成。
字符串 = 双引号包含字符、转义符、扩展。
转义 = 支持转义$、\ 和 "。
花括号{扩展 = {(标记符、数组访问、作用域访问)}等。
16进制hex = 0x开头,包含0-9数字和大小写字母a-f。
扩展 = $开头的,标记符、16进制、花括号扩展,
字符 = 除了$、"、换行以外的字符
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
在反斜线\后的一些字符转义后,表示特定的字符:
\" U+0022 双引号
\$ U+0024 美元符号
\\ U+005C 反斜线
- 1.
- 2.
- 3.
为插入字节值,可以使用 $0xFF 这样的表示法,例如,为字符串中插入换行,可以使用:“Line one$0x0ALine two”。
变量扩展会评估解析{var_one}”格式显式标识变量全名,避免混淆。
"$var_one/$var_two"
- 1.
Punctuation 标点符号
使用上述字符序列表示标点。
Grammar 语法
输入的token标记形成语义树,遵循与上下文无关的语法。所有二元运算符是左结合的。
Types 类型
GN语言是动态类型的,支持下述类型。
- Boolean布尔类型: 使用关键字 "true" and "false". 不支持布尔和整数间的隐式转换.
- 整数: GN支持的整数为有符号64位整数.
- 字符串: 8位未强制编码。当和其他系统进行字符串交互时,会假设字符串字符集编码为UTF-8。
- 列表: 任意长度的有序的值。
- Scopes作用域: 类似变量名作为键值的字典。
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
Lists 列表
列表是使用中括号封闭的使用逗号分割的一些成员。如:
mylist = [ 0, 1, 2, "some string" ]
- 1.
列表支持连接操作,可以使用’+’ 和 '+='操作符。空值不能连接列表,为增加一个列表成员,列表长度至少为1。
列表还支持删除操作,可以使用’-’ 和 '-='操作符。删除操作会从左边的列表中删除右边的列表中的所有成员。删除不存在的成员时会报错,这会避免笔误,也能检测尝试删除不再使用成员的无用的代码。
使用’=’ 赋值一个非空列表给另外一个非空列表会报错,这可以避免覆盖数据,大多数场景可能打算使用的是连接操作’+='。如需专门覆写数据,首先给个空列表:
mylist = []
mylist = otherlist
- 1.
- 2.
Scopes 作用域
6、小结
本篇,我们学习了GN构建文件的语言语法,该文的学习可以掌握编写GN构建文件的需要具备的知识。
参考资料
