OpenHarmony下GN语法普法
引言
前面一直在折腾怎么移植,怎么编写,尼玛忘了搞最基本的GN语法了。这不必须给安排上!
一.GN表达式语言和GN作用域
GN 是简单的动态类型的命令式语言,其最终目的只是产生声明性的 Ninja 规则。一切都围绕作用域决定,它既是该语言的词法绑定(lexical binding,即静态绑定)结构,也是数据类型。
GN 值可以使用下列几种类型的任何一种:
- 布尔型(boolean),或 true 或 false
- 整型(integer),带符号,使用普通十进制语法;不常用
- 字符串(string),总是使用"双引号"引住(注意下面关于 $ 的扩展)
- 域(scope),使用花括号括住 { … };见下。
- 值列表(list of values),使用方括号括住:[ 1, true, “foo”, { x=1 y=2 } ]是一个四元素列表。
值是动态类型的,因而没有隐式类型的强迫,但也就没有这样的类型检查。不同类型的值比较结果永不相等,但是比较它们并不是错误。
字符串字面值在双引号中将简单的 $var 或 v a r 表达式扩展。这是一种立即扩展( i m m e d i a t e e x p a n s i o n ):当 v a r 为字符串时, x {var} 表达式扩展。这是一种立即扩展(immediate expansion):当 var 为字符串时,x var表达式扩展。这是一种立即扩展(immediateexpansion):当var为字符串时,x{var}y 与 x + var + y 相同。这样,任何值都可以表示为打印美观的字符串。
字母、数字和下划线组成的标志符可以通过赋值运算符填充一个域。GN 语言所做的实际上就是使用 = 进行命令式赋值,并通过 += 进行修改(也有一些特殊的方式来产生副作用,如 print(),用于调试;又如 write_file(),谨慎使用)。
1.1 整形
整形就比较简单了,形如:
x = 1
y = 2
关于这块有如下几点需要注意:
- GN语法是空白不敏感的
- GN语法不支持 ?= 这种