Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 2ee6253

Browse files
Merge pull request #18 from codefuse-ai/lhk_dev
[doc] Add contents in doc/4_godelscript_language.md
2 parents 74a1979 + edec314 commit 2ee6253

File tree

1 file changed

+58
-33
lines changed

1 file changed

+58
-33
lines changed

‎doc/4_godelscript_language.md

Lines changed: 58 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,31 @@
11
# GödelScript 查询语言
22

3+
## 目录
4+
5+
- [GödelScript 基本概念和语法](#gödelscript-基本概念和语法)
6+
- [简介](#简介)
7+
- [基本程序构成](#基本程序构成)
8+
- [基础类型和编译器内建函数](#基础类型和编译器内建函数)
9+
- [函数](#函数)
10+
- [语句](#语句)
11+
- [Schema](#schema)
12+
- [数据库](#数据库)
13+
- [Trait](#trait)
14+
- [Import](#import)
15+
- [Query](#query)
16+
- [Ungrounded Error: 未赋值/未绑定错误](#ungrounded-error-未赋值未绑定错误)
17+
- [查询示例](#查询示例)
18+
- [Java](#java)
19+
- [Python](#python)
20+
- [JavaScript](#javascript)
21+
- [XML](#xml)
22+
- [Go](#go)
23+
- [查询调试和优化技巧](#查询调试和优化技巧)
24+
- [Schema 传参导致笛卡尔积过大](#schema-传参导致笛卡尔积过大)
25+
- [多层 for 导致笛卡尔积过大](#多层-for-导致笛卡尔积过大)
26+
- [不要滥用`@inline`](#不要滥用inline必须用inline的优化策略)
27+
- [在本机使用查询脚本流程](#在本机使用查询脚本流程)
28+
329
## GödelScript 基本概念和语法
430

531
### 简介
@@ -30,13 +56,13 @@ GödelScript 编译器主要应用场景为:
3056

3157
GödelScript 程序可能包含:
3258

33-
- 模块和符号[引用语句](#import)
34-
- Schema [类型声明](#schema)
35-
- 数据库[类型声明](#数据库)
36-
- Trait [声明](#trait)
37-
- [方法实现](#方法实现)
38-
- 函数[声明和实现](#函数)
39-
- Query [声明](#query)
59+
- [模块和符号引用](#import)
60+
- [Schema 类型声明](#schema)
61+
- [数据库类型声明](#数据库)
62+
- [Trait 声明](#trait)
63+
- [Schema 方法实现](#方法实现)
64+
- [函数声明和实现](#函数)
65+
- [Query 声明](#query)
4066

4167
包含以上所有组成内容的样例:
4268

@@ -99,15 +125,14 @@ GödelScript 采用类 C 语言的注释方式。
99125
/*
100126
* 1. 多行注释
101127
* 2. 多行注释
102-
* 3. 多行注释
103128
*/
104129
```
105130

106131
#### `main` 函数
107132

108133
GödelScript 查询脚本可以包含`main`函数,该函数无返回值。在不实现`main`函数,且没有写 query 声明的情况下,程序不会输出。
109134

110-
更多详细内容请看 [`main`函数](#gödelscript-main-函数)
135+
更多详细内容请看 [main函数](#gödelscript-main-函数)
111136

112137
```rust
113138
fn main() {
@@ -496,9 +521,9 @@ fn a() -> int {
496521
}
497522

498523
fn b() -> *int {
499-
yield 1
500-
yield 2
501-
yield 3
524+
yield 1
525+
yield 2
526+
yield 3
502527
}
503528
```
504529

@@ -536,9 +561,9 @@ GödelScript 使用如下方式来声明和实现`schema`的相关方法:
536561
impl File {
537562
// 静态方法
538563
fn f1() -> ... {...}
539-
// 成员方法,第一个参数必须为 self
540-
fn f2(self) -> ... {...}
541-
...
564+
// 成员方法,第一个参数必须为 self
565+
fn f2(self) -> ... {...}
566+
...
542567
}
543568
```
544569
##### 静态方法
@@ -678,7 +703,7 @@ schema File {
678703
impl File {
679704
@data_constraint
680705
fn __all__() -> *File {...}
681-
fn getId(self) -> int {...}
706+
fn getId(self) -> int {...}
682707
fn staticMethod() -> string {return "File"}
683708
}
684709

@@ -947,11 +972,11 @@ database MyDB {
947972

948973
```rust
949974
query example from
950-
coref::java::Location loc in coref::java::Location(coref::java::JavaDB::load("..."))
975+
coref::java::Location loc in coref::java::Location(coref::java::JavaDB::load("..."))
951976
where
952-
...
977+
...
953978
select
954-
...
979+
...
955980
```
956981

957982
- schema 静态方法调用
@@ -971,12 +996,12 @@ Query 用于进行一些简单的查询,编写的 query 一定会被输出,
971996

972997
```rust
973998
query 名字 from
974-
变量名 in 初始值,
999+
变量名 in 初始值,
9751000
变量名 in 初始值,
9761001
变量名 in 初始值
9771002
where 条件
9781003
select 值 as 输出的列名
979-
as 输出的列名,
1004+
as 输出的列名,
9801005
as 输出的列名,
9811006
as 输出的列名
9821007
```
@@ -987,7 +1012,7 @@ from 列表中的变量声明无需加上类型标注,编译器会进行自动
9871012

9881013
```rust
9891014
query hello_world from
990-
info in "hello world"
1015+
info in "hello world"
9911016
select info as greeting
9921017
```
9931018

@@ -1063,14 +1088,14 @@ fn class_method(className: string, methodName: string, methodSignature: string)
10631088
GödelScript 会将未与数据绑定的符号判定为`ungrounded(未赋值/未绑定)`。基本判定规则为:
10641089

10651090
- 未初始化的/未被使用的/未与集合绑定的符号
1066-
- 未被绑定的`int``string`参数
1091+
- 未被绑定的`int``string`参数
10671092
- 未被使用的 database 类型的参数
10681093
- 函数体有语句,但是没有任何返回语句
10691094
- 在取非运算块中进行绑定的符号
10701095
- 例如 `!(__tmp = 1)`,`__tmp`会被认为是未绑定的
10711096
- 在取非运算块中调用 inline 函数或数据构造函数
10721097

1073-
#### 未使用的 database/基础类型参数
1098+
#### 1.未使用的 database/基础类型参数
10741099

10751100
函数代码块中,如果有一个语句分支没有使用参数中的`database`或者基础类型参数,则一定会导致`ungrounded`:
10761101

@@ -1091,7 +1116,7 @@ impl XXX {
10911116
if (self.hasAttribute(attributeName)) {
10921117
return self.getValueByAttributeName(attributeName)
10931118
}
1094-
if (!self.hasAttribute(attributeName) {
1119+
if (!self.hasAttribute(attributeName)) {
10951120
return "null"
10961121
}
10971122
}
@@ -1104,7 +1129,7 @@ fn xxx() -> xx {
11041129
}
11051130
```
11061131

1107-
#### 函数体有语句的情况下无返回语句
1132+
#### 2.函数体有语句的情况下无返回语句
11081133

11091134
GödelScript 允许一个函数体不包含任何语句,即空函数体。但是如果函数体中有其他语句,则 GödelScript 会要求必须有至少一个返回语句,否则就会出现 ungrounded error。
11101135

@@ -1118,7 +1143,7 @@ fn test() -> int {
11181143
}
11191144
```
11201145

1121-
#### 取非运算块中使用 inline 函数或数据构造函数
1146+
#### 3.取非运算块中使用 inline 函数或数据构造函数
11221147

11231148
上文提到了可以通过`@inline`注解来规避 ungrounded error。但是如果在取非运算中使用了含有该注解的函数,则必然会导致 ungrounded error。
11241149

@@ -1142,7 +1167,7 @@ if (!check(for_test())) {
11421167
}
11431168
```
11441169

1145-
#### 对链式调用的取非运算
1170+
#### 4.对链式调用的取非运算
11461171

11471172
GödelScript 未对该情况执行`ungrounded`检测,但是该写法会导致在 Soufflé 中报`ungrounded`错误:
11481173

@@ -1226,7 +1251,7 @@ fn main() {
12261251
use coref::java::*
12271252

12281253
fn default_java_db() -> JavaDB {
1229-
return JavaDB::load("coref_java_src.db")
1254+
return JavaDB::load("coref_java_src.db")
12301255
}
12311256

12321257
/**
@@ -1243,7 +1268,7 @@ fn class_hierarchy(className : string, superClassName : string) -> bool {
12431268
}
12441269

12451270
fn main() {
1246-
output(class_hierarchy())
1271+
output(class_hierarchy())
12471272
}
12481273
```
12491274

@@ -1254,7 +1279,7 @@ fn main() {
12541279
use coref::java::*
12551280

12561281
fn default_java_db() -> JavaDB {
1257-
return JavaDB::load("coref_java_src.db")
1282+
return JavaDB::load("coref_java_src.db")
12581283
}
12591284

12601285
// Find all methods of the class
@@ -1268,7 +1293,7 @@ fn methods(className : string, methodName : string) -> bool {
12681293
}
12691294

12701295
fn main() {
1271-
output(methods())
1296+
output(methods())
12721297
}
12731298
```
12741299

@@ -2191,7 +2216,7 @@ fn getByIndex(self) -> Expression {
21912216
return e
21922217
}
21932218
}
2194-
}
2219+
}
21952220
}
21962221
```
21972222

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /