Skip to content

Commit 9aea2d8

Browse files
author
magiclu550
committed
support strong type : "-st"
1 parent 53eef40 commit 9aea2d8

File tree

9 files changed

+198
-153
lines changed

9 files changed

+198
-153
lines changed

.idea/compiler.xml

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/scala_compiler.xml

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

README.md

Lines changed: 148 additions & 146 deletions
Original file line numberDiff line numberDiff line change
@@ -33,151 +33,6 @@ final Map<Language,Map<String,String>> libs = [
3333
7. 关于项目开启的原因可以参见 [#411](https://github.com/LingDong-/wenyan-lang/issues/411)
3434
8. 本项目的目标语言是groovy,以实现动态语言,主要是为了实现`wenyan`可以调用java相关类库(并尽量确保js版本的wy文件),以实现在虚拟机运行。
3535
9. 对于文渊阁的支持,只需要在项目的src执行wyg i 名称即可。编译器提供了相关参数实现文渊阁的编译
36-
10.
37-
38-
> 对于部分不兼容的特性
39-
40-
PS: 由于一些代码按照js特性去实现的,很多特性我都是通过语法糖暴力实现。但这些我确实无力去实现了
41-
42-
1. 对于函数调用,如果是闭包函数,请先`吾有一術。名之曰「xx」。`定义,这样才能确保前面的函数调用后面实现的函数
43-
44-
```wenyan
45-
今有一術。名之曰「包渾沌」。欲行是術。必先得一物。曰「渾沌物」。乃行是術曰。
46-
吾有一言。曰「「 」」名之曰「挪符」。
47-
吾有一言。曰「「\n」」名之曰「抬符」。
48-
吾有一術。名之曰「包數」。
49-
吾有一術。名之曰「暗包渾沌」。
50-
吾有一術。名之曰「包列」。
51-
吾有一術。名之曰「包物」。
52-
吾有一術。名之曰「包數」。欲行是術。必先得一數曰「甲」。乃行是術曰。
53-
吾有一言。名之曰「正負」。
54-
若「甲」小於零者。
55-
乘「甲」以負一。昔之「甲」者。今其是矣。
56-
昔之「正負」者。今「「負」」是矣。
57-
云云。
58-
除「甲」以一。所餘幾何。名之曰「小數」
59-
減「小數」於「甲」。名之曰「整數」。
60-
吾有二言。名之曰「小」曰「整」。
61-
恆為是。若「整數」不大於零者乃止也。
62-
除「整數」以十。所餘幾何。名之曰「位」。
63-
加「位」以一。夫「位名」之其。加其以「整」。昔之「整」者。今其是矣。
64-
減「整數」以「位」。除其以十。昔之「整數」者。今其是矣。
65-
云云。
66-
恆為是。若「小數」不大於零者乃止也。
67-
乘「小數」以十。昔之「小數」者。今其是矣。
68-
除「小數」以一。所餘幾何。名之曰「位」。
69-
加「位」以一。夫「位名」之其。加其於「小」。昔之「小」者。今其是矣。
70-
減「小數」以「位」。昔之「小數」者。今其是矣。
71-
云云。
72-
加「正負」以「整」。昔之「整」者。今其是矣。
73-
夫「小」之長。若其然者。
74-
加「整」以「「·」」。加其以「小」。乃得矣。
75-
云云。
76-
乃得「整」。
77-
是謂「包數」之術也。
78-
79-
吾有一術。名之曰「暗包渾沌」。欲行是術。必先得一言曰「類」。一元曰「實」。一數曰「挪抬」。乃行是術曰。
80-
吾有一言。名之曰「渾沌語」。
81-
若「類」等於「「物」」者。
82-
加「渾沌語」以「抬符」昔之「渾沌語」者。今其是矣。
83-
夫「實」。加「挪抬」以一。取二以施「包物」。加其於「渾沌語」。昔之「渾沌語」者。今其是矣。
84-
為是「挪抬」遍。加「渾沌語」以「挪符」。昔之「渾沌語」者。今其是矣也。
85-
加「渾沌語」以「「也」」加其以「抬符」。昔之「渾沌語」者。今其是矣。
86-
87-
或若「類」等於「「列」」者。
88-
加「渾沌語」以「抬符」昔之「渾沌語」者。今其是矣。
89-
夫「實」。加「挪抬」以一。取二以施「包列」。加其於「渾沌語」。昔之「渾沌語」者。今其是矣。
90-
為是「挪抬」遍。加「渾沌語」以「挪符」。昔之「渾沌語」者。今其是矣也。
91-
加「渾沌語」以「「也」」加其以「抬符」。昔之「渾沌語」者。今其是矣。
92-
93-
或若「類」等於「「言」」者。
94-
加「渾沌語」以「引起」加其以「實」加其以「引迄」。加其以「抬符」昔之「渾沌語」者。今其是矣。
95-
或若「類」等於「「爻」」者。
96-
吾有一言。曰「「陽」」。名之曰「爻名」
97-
夫「實」。若其不然者。昔之「爻名」者。今「「陰」」是矣也。
98-
加「渾沌語」以「引起」加其以「爻名」加其以「引迄」。加其以「抬符」昔之「渾沌語」者。今其是矣。
99-
或若「類」等於「「數」」者。
100-
施「包數」於「實」。名之曰「數名」。
101-
加「渾沌語」以「引起」加其以「數名」加其以「引迄」。加其以「抬符」昔之「渾沌語」者。今其是矣。
102-
云云。
103-
乃得「渾沌語」
104-
是謂「暗包渾沌」之術也。
105-
106-
吾有一術。名之曰「包列」。欲行是術。必先得一物曰「渾沌列」。一數曰「挪抬」。乃行是術曰。
107-
吾有一言。名之曰「渾沌語」。
108-
凡「渾沌列」中之「實」
109-
施「識類」於「實」。名之曰「類」。
110-
111-
為是「挪抬」遍。加「渾沌語」以「挪符」。昔之「渾沌語」者。今其是矣也。
112-
加「渾沌語」以「類」。
113-
昔之「渾沌語」者。今其是矣。
114-
115-
施「暗包渾沌」於「類」於「實」於「挪抬」。加其於「渾沌語」。昔之「渾沌語」者。今其是矣。
116-
云云。
117-
乃得「渾沌語」
118-
是謂「包列」之術也。
119-
120-
吾有一術。名之曰「包物」。欲行是術。必先得一物曰「渾沌物」。一數曰「挪抬」。乃行是術曰。
121-
122-
吾有一言。名之曰「渾沌語」。
123-
124-
施「列物之端」於「渾沌物」。名之曰「諸端」。
125-
126-
凡「諸端」中之「端」
127-
施「取物」於「渾沌物」於「端」。名之曰「實」。
128-
施「識類」於「實」。名之曰「類」。
129-
130-
為是「挪抬」遍。加「渾沌語」以「挪符」。昔之「渾沌語」者。今其是矣也。
131-
加「渾沌語」以「「之」」。加其以「引起」。加其以「端」。加其以「引迄」。加其以「類」。
132-
昔之「渾沌語」者。今其是矣。
133-
134-
施「暗包渾沌」於「類」於「實」於「挪抬」。加其於「渾沌語」。昔之「渾沌語」者。今其是矣。
135-
云云。
136-
乃得「渾沌語」
137-
是謂「包物」之術也。
138-
139-
施「包物」於「渾沌物」於一。名之曰「餛飩語」。
140-
加「抬符」以「餛飩語」。加其於「「物」」。加其以「「也」」。乃得矣。
141-
是謂「包渾沌」之術也。
142-
143-
```
144-
145-
2. 下一级定义域重新定义上一级已经定义的变量
146-
147-
```javascript
148-
var= 1;
149-
var= 1;
150-
for (var _rand1 = 0; _rand1 < 試; _rand1++) {
151-
var _ans1 =* 甲;
152-
var= _ans1;
153-
var _ans2 =- 2;
154-
var= _ans2;
155-
var _ans3 =* 2;
156-
var= _ans3;
157-
var _ans4 =/ 丙;
158-
var= _ans4;
159-
var _ans5 =- 茂;
160-
var= _ans5;
161-
};
162-
163-
```
164-
165-
3. 对于第一级的函数是无法引用的,如果要引用,也是有办法
166-
167-
```wenyan
168-
今有一術。名之曰「包渾沌1」。欲行是術。必先得一物。曰「渾沌物」。乃行是術曰。
169-
....
170-
是謂「包渾沌1」之術也。
171-
172-
今有一術。名之曰「包渾沌」。欲行是術。必先得一物。曰「渾沌物」。乃行是術曰。
173-
今有一術。名之曰「包渾沌3」。欲行是術。必先得一物。曰「渾沌物」。乃行是術曰。
174-
施「包渾沌1」於「渾沌物」
175-
是謂「包渾沌」之術也。
176-
是謂「包渾沌」之術也。
177-
178-
```
179-
180-
这样通过引用包混沌3即可,由于语言特性的限制,对于第一级函数的引用我正在研究
18136

18237

18338
> 相关链接
@@ -379,6 +234,8 @@ var 甲 = 1;
379234

380235
-lv: 分詞可視化
381236

237+
-st: 开启强类型编译
238+
382239
> 直接加载文言文脚本
383240
384241
```groovy
@@ -403,4 +260,149 @@ javaClass.getDeclaredMethod("run").invoke(javaClass.newInstance())
403260
404261
1. 编译器将wy文件编译为class字节码文件
405262
2. 将class字节码文件打包为jar包
406-
3. 通过编译器-l导入进去即可
263+
3. 通过编译器-l导入进去即可
264+
265+
> 对于部分不兼容的特性
266+
267+
PS: 由于一些代码按照js特性去实现的,很多特性我都是通过语法糖暴力实现。但这些我确实无力去实现了
268+
269+
1. 对于函数调用,如果是闭包函数,请先`吾有一術。名之曰「xx」。`定义,这样才能确保前面的函数调用后面实现的函数
270+
271+
```wenyan
272+
今有一術。名之曰「包渾沌」。欲行是術。必先得一物。曰「渾沌物」。乃行是術曰。
273+
吾有一言。曰「「 」」名之曰「挪符」。
274+
吾有一言。曰「「\n」」名之曰「抬符」。
275+
吾有一術。名之曰「包數」。
276+
吾有一術。名之曰「暗包渾沌」。
277+
吾有一術。名之曰「包列」。
278+
吾有一術。名之曰「包物」。
279+
吾有一術。名之曰「包數」。欲行是術。必先得一數曰「甲」。乃行是術曰。
280+
吾有一言。名之曰「正負」。
281+
若「甲」小於零者。
282+
乘「甲」以負一。昔之「甲」者。今其是矣。
283+
昔之「正負」者。今「「負」」是矣。
284+
云云。
285+
除「甲」以一。所餘幾何。名之曰「小數」
286+
減「小數」於「甲」。名之曰「整數」。
287+
吾有二言。名之曰「小」曰「整」。
288+
恆為是。若「整數」不大於零者乃止也。
289+
除「整數」以十。所餘幾何。名之曰「位」。
290+
加「位」以一。夫「位名」之其。加其以「整」。昔之「整」者。今其是矣。
291+
減「整數」以「位」。除其以十。昔之「整數」者。今其是矣。
292+
云云。
293+
恆為是。若「小數」不大於零者乃止也。
294+
乘「小數」以十。昔之「小數」者。今其是矣。
295+
除「小數」以一。所餘幾何。名之曰「位」。
296+
加「位」以一。夫「位名」之其。加其於「小」。昔之「小」者。今其是矣。
297+
減「小數」以「位」。昔之「小數」者。今其是矣。
298+
云云。
299+
加「正負」以「整」。昔之「整」者。今其是矣。
300+
夫「小」之長。若其然者。
301+
加「整」以「「·」」。加其以「小」。乃得矣。
302+
云云。
303+
乃得「整」。
304+
是謂「包數」之術也。
305+
306+
吾有一術。名之曰「暗包渾沌」。欲行是術。必先得一言曰「類」。一元曰「實」。一數曰「挪抬」。乃行是術曰。
307+
吾有一言。名之曰「渾沌語」。
308+
若「類」等於「「物」」者。
309+
加「渾沌語」以「抬符」昔之「渾沌語」者。今其是矣。
310+
夫「實」。加「挪抬」以一。取二以施「包物」。加其於「渾沌語」。昔之「渾沌語」者。今其是矣。
311+
為是「挪抬」遍。加「渾沌語」以「挪符」。昔之「渾沌語」者。今其是矣也。
312+
加「渾沌語」以「「也」」加其以「抬符」。昔之「渾沌語」者。今其是矣。
313+
314+
或若「類」等於「「列」」者。
315+
加「渾沌語」以「抬符」昔之「渾沌語」者。今其是矣。
316+
夫「實」。加「挪抬」以一。取二以施「包列」。加其於「渾沌語」。昔之「渾沌語」者。今其是矣。
317+
為是「挪抬」遍。加「渾沌語」以「挪符」。昔之「渾沌語」者。今其是矣也。
318+
加「渾沌語」以「「也」」加其以「抬符」。昔之「渾沌語」者。今其是矣。
319+
320+
或若「類」等於「「言」」者。
321+
加「渾沌語」以「引起」加其以「實」加其以「引迄」。加其以「抬符」昔之「渾沌語」者。今其是矣。
322+
或若「類」等於「「爻」」者。
323+
吾有一言。曰「「陽」」。名之曰「爻名」
324+
夫「實」。若其不然者。昔之「爻名」者。今「「陰」」是矣也。
325+
加「渾沌語」以「引起」加其以「爻名」加其以「引迄」。加其以「抬符」昔之「渾沌語」者。今其是矣。
326+
或若「類」等於「「數」」者。
327+
施「包數」於「實」。名之曰「數名」。
328+
加「渾沌語」以「引起」加其以「數名」加其以「引迄」。加其以「抬符」昔之「渾沌語」者。今其是矣。
329+
云云。
330+
乃得「渾沌語」
331+
是謂「暗包渾沌」之術也。
332+
333+
吾有一術。名之曰「包列」。欲行是術。必先得一物曰「渾沌列」。一數曰「挪抬」。乃行是術曰。
334+
吾有一言。名之曰「渾沌語」。
335+
凡「渾沌列」中之「實」
336+
施「識類」於「實」。名之曰「類」。
337+
338+
為是「挪抬」遍。加「渾沌語」以「挪符」。昔之「渾沌語」者。今其是矣也。
339+
加「渾沌語」以「類」。
340+
昔之「渾沌語」者。今其是矣。
341+
342+
施「暗包渾沌」於「類」於「實」於「挪抬」。加其於「渾沌語」。昔之「渾沌語」者。今其是矣。
343+
云云。
344+
乃得「渾沌語」
345+
是謂「包列」之術也。
346+
347+
吾有一術。名之曰「包物」。欲行是術。必先得一物曰「渾沌物」。一數曰「挪抬」。乃行是術曰。
348+
349+
吾有一言。名之曰「渾沌語」。
350+
351+
施「列物之端」於「渾沌物」。名之曰「諸端」。
352+
353+
凡「諸端」中之「端」
354+
施「取物」於「渾沌物」於「端」。名之曰「實」。
355+
施「識類」於「實」。名之曰「類」。
356+
357+
為是「挪抬」遍。加「渾沌語」以「挪符」。昔之「渾沌語」者。今其是矣也。
358+
加「渾沌語」以「「之」」。加其以「引起」。加其以「端」。加其以「引迄」。加其以「類」。
359+
昔之「渾沌語」者。今其是矣。
360+
361+
施「暗包渾沌」於「類」於「實」於「挪抬」。加其於「渾沌語」。昔之「渾沌語」者。今其是矣。
362+
云云。
363+
乃得「渾沌語」
364+
是謂「包物」之術也。
365+
366+
施「包物」於「渾沌物」於一。名之曰「餛飩語」。
367+
加「抬符」以「餛飩語」。加其於「「物」」。加其以「「也」」。乃得矣。
368+
是謂「包渾沌」之術也。
369+
370+
```
371+
372+
2. 下一级定义域重新定义上一级已经定义的变量
373+
374+
```javascript
375+
var= 1;
376+
var= 1;
377+
for (var _rand1 = 0; _rand1 < 試; _rand1++) {
378+
var _ans1 =* 甲;
379+
var= _ans1;
380+
var _ans2 =- 2;
381+
var= _ans2;
382+
var _ans3 =* 2;
383+
var= _ans3;
384+
var _ans4 =/ 丙;
385+
var= _ans4;
386+
var _ans5 =- 茂;
387+
var= _ans5;
388+
};
389+
390+
```
391+
392+
3. 对于第一级的函数是无法引用的,如果要引用,也是有办法
393+
394+
```wenyan
395+
今有一術。名之曰「包渾沌1」。欲行是術。必先得一物。曰「渾沌物」。乃行是術曰。
396+
....
397+
是謂「包渾沌1」之術也。
398+
399+
今有一術。名之曰「包渾沌」。欲行是術。必先得一物。曰「渾沌物」。乃行是術曰。
400+
今有一術。名之曰「包渾沌3」。欲行是術。必先得一物。曰「渾沌物」。乃行是術曰。
401+
施「包渾沌1」於「渾沌物」
402+
是謂「包渾沌」之術也。
403+
是謂「包渾沌」之術也。
404+
405+
```
406+
407+
这样通过引用包混沌3即可,由于语言特性的限制,对于第一级函数的引用我正在研究
408+

src/main/java/cn/wenyan/compiler/WenYanCompilerImpl.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ public class WenYanCompilerImpl implements WenYanCompiler,Cloneable{
4444

4545
private Map<File,File> wygFiles = new HashMap<>();
4646

47+
private boolean strongType = false;
48+
4749
private boolean lexerViewer;
4850

4951
protected Library library;
@@ -177,6 +179,7 @@ public int init(CompilerConfig compilerConfig){
177179
this.compilerConfig = compilerConfig;
178180
this.supportPinyin = compilerConfig.isSupportPinYin();
179181
this.lexerViewer = compilerConfig.isLexerViewer();
182+
this.strongType = compilerConfig.isStrongType();
180183
String[] files = compilerConfig.getCompileFiles();
181184
String[] args = compilerConfig.getRunArgs();
182185
String[] libs = compilerConfig.getCompileLib();
@@ -407,6 +410,10 @@ public Library getLibrary() {
407410
return library;
408411
}
409412

413+
public boolean isStrongType() {
414+
return strongType;
415+
}
416+
410417
@Override
411418
public WenYanCompilerImpl clone() throws CloneNotSupportedException {
412419
return (WenYanCompilerImpl) super.clone();

src/main/java/cn/wenyan/compiler/command/CommandHandler.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ public static void registerCommands(){
3131
compileCommand.put("-wyg",new WenYuanGeCommand());
3232
compileCommand.put("-wd",new WenYuanGeDownloadCommand());
3333
compileCommand.put("-lv",new LexerViewerCommand());
34+
compileCommand.put("-st",new StrongTypeCommand());
3435
}
3536

3637
public CommandHandler(WenYanCompilerImpl compiler){

src/main/java/cn/wenyan/compiler/command/CompilerConfig.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
public class CompilerConfig {
44

5+
private boolean strongType;
6+
57
private boolean lexerViewer;
68

79
private String wygDownload;
@@ -28,6 +30,14 @@ public class CompilerConfig {
2830

2931
private String[] runArgs = new String[0];
3032

33+
public boolean isStrongType() {
34+
return strongType;
35+
}
36+
37+
public void setStrongType(boolean strongType) {
38+
this.strongType = strongType;
39+
}
40+
3141
public boolean isSupportPinYin() {
3242
return supportPinYin;
3343
}

0 commit comments

Comments
 (0)