update README & bug fixed
This commit is contained in:
parent
e7f503fae1
commit
9139e34c0b
110
README.md
110
README.md
|
@ -14,6 +14,8 @@
|
|||
* [__Why Writing Nasal Interpreter__](#why-writing-nasal-interpreter)
|
||||
* [__Compile__](#how-to-compile)
|
||||
* [__Usage__](#how-to-use)
|
||||
* [__Release Notes__](#release-notes)
|
||||
* [v8.0](#version-80-release)
|
||||
* [__Parser__](#parser)
|
||||
* [v1.0](#version-10-parser-last-update-20191014)
|
||||
* [__Abstract Syntax Tree__](#abstract-syntax-tree)
|
||||
|
@ -27,11 +29,13 @@
|
|||
* [v6.0](#version-60-vm-last-update-202161)
|
||||
* [v6.5](#version-65-vm-last-update-2021624)
|
||||
* [v7.0](#version-70-vm-last-update-2021108)
|
||||
* [v8.0](#version-80-vm-latest)
|
||||
* [v8.0](#version-80-vm-last-update-2022212)
|
||||
* [v9.0](#version-90-vm-latest)
|
||||
* [__Benchmark__](#benchmark)
|
||||
* [v6.5 (i5-8250U windows 10)](#version-65-i5-8250u-windows10-2021619)
|
||||
* [v6.5 (i5-8250U ubuntu-WSL)](#version-70-i5-8250u-ubuntu-wsl-on-windows10-2021629)
|
||||
* [v8.0 (R9-5900HX ubuntu-WSL)](#version-80-r9-5900hx-ubuntu-wsl-2022123)
|
||||
* [v9.0 (R9-5900HX ubuntu-WSL)](#version-90-r9-5900hx-ubuntu-wsl-2022213)
|
||||
* [__Tutorial__](#tutorial)
|
||||
* [basic value type](#basic-value-type)
|
||||
* [operators](#operators)
|
||||
|
@ -59,9 +63,9 @@
|
|||
|
||||
__Contact us if having great ideas to share!__
|
||||
|
||||
* __E-mail__: lhk101lhk101@qq.com
|
||||
* __E-mail__: __lhk101lhk101@qq.com__
|
||||
|
||||
* __QQ__: 896693328
|
||||
* __QQ__: __896693328__
|
||||
|
||||
## __Introduction__
|
||||
|
||||
|
@ -100,12 +104,11 @@ this interpreter a useful tool in your own projects (such as a script in a game
|
|||
## __How to Compile__
|
||||
|
||||
Better choose the latest update of the interpreter.
|
||||
Download the source code and build it!
|
||||
It's quite easy to build this interpreter.
|
||||
Download the source and build it! It's quite easy to build this interpreter.
|
||||
|
||||
__MUST USE__ __`-O2/-O3`__ if want to optimize the interpreter!
|
||||
__CAUTION__: If want to use the release zip/tar.gz file to build the interpreter, please read the __Release Notes__ below to make sure this release file has no fatal bugs. Also in __Release Notes__ there's tips to fix the release manually.
|
||||
|
||||
Also remember to use g++ or clang++.(mingw-w64 in __`Windows`__)
|
||||
Also remember to use g++ or clang++.(`mingw-w64` in __`Windows`__)
|
||||
|
||||
> [cpp compiler] -std=c++11 -O3 main.cpp -o nasal.exe -fno-exceptions
|
||||
|
||||
|
@ -129,7 +132,7 @@ Use these commands to get version of interpreter:
|
|||
/ \/ / _` / __|/ _` | |
|
||||
/ /\ / (_| \__ \ (_| | |
|
||||
\_\ \/ \__,_|___/\__,_|_|
|
||||
nasal interpreter ver 8.0
|
||||
nasal interpreter ver 9.0
|
||||
thanks to : https://github.com/andyross/nasal
|
||||
code repo : https://github.com/ValKmjolnir/Nasal-Interpreter
|
||||
code repo : https://gitee.com/valkmjolnir/Nasal-Interpreter
|
||||
|
@ -145,7 +148,7 @@ Use these commands to get help(see more debug commands in help):
|
|||
nasal <option>
|
||||
option:
|
||||
-h, --help | get help.
|
||||
-v, --version | get version of nasal interpreter.
|
||||
-v, --version | get version of nasal interpreter.
|
||||
|
||||
nasal <file>
|
||||
file:
|
||||
|
@ -154,12 +157,15 @@ file:
|
|||
nasal [options...] <file>
|
||||
option:
|
||||
-l, --lex | view token info.
|
||||
-a, --ast | view abstract syntax tree.
|
||||
-a, --ast | view abstract syntax tree.
|
||||
-c, --code | view bytecode.
|
||||
-e, --exec | execute.
|
||||
-t, --time | execute and get the running time.
|
||||
-o, --opcnt | execute and count used operands.
|
||||
-d, --detail | execute and get detail crash info.
|
||||
| get garbage collector info if did not crash.
|
||||
-op, --optimize| use optimizer(beta).
|
||||
| if want to use -op and run, please use -op -e/-t/-o/-d.
|
||||
-dbg, --debug | debug mode (this will ignore -t -o -d).
|
||||
file:
|
||||
input file name to execute script file.
|
||||
|
@ -171,6 +177,21 @@ If your system is __`Windows`__ and you want to output unicode,please use this c
|
|||
|
||||
The interpreter's interactive mode will do this automatically,so you don't need to run this command if you use the interactive interpreter.
|
||||
|
||||
## __Release Notes__
|
||||
|
||||
### __version 8.0 release__
|
||||
|
||||
I made a __big mistake__ in `v8.0` release:
|
||||
|
||||
in __`nasal_dbg.h:215`__: `auto canary=gc.stack+STACK_MAX_DEPTH-1;`
|
||||
|
||||
this will cause incorrect `stackoverflow` error.
|
||||
please change it to:
|
||||
|
||||
`canary=gc.stack+STACK_MAX_DEPTH-1;`
|
||||
|
||||
If do not change this line, only the debugger runs abnormally. this bug is fixed in `v9.0`
|
||||
|
||||
## __Parser__
|
||||
|
||||
`LL(k)` parser.
|
||||
|
@ -562,7 +583,7 @@ a=b=0;
|
|||
0x00000009: nop 0x00000000
|
||||
```
|
||||
|
||||
### version 8.0 vm (latest)
|
||||
### version 8.0 vm (last update 2022/2/12)
|
||||
|
||||
2021/10/8 update:
|
||||
|
||||
|
@ -627,6 +648,19 @@ The format of output information of bytecodes changes to this:
|
|||
Delete `op_pone` and `op_pzero`.
|
||||
Both of them are meaningless and will be replaced by `op_pnum`.
|
||||
|
||||
### version 9.0 vm (latest)
|
||||
|
||||
2022/2/12 update:
|
||||
|
||||
Local values now are __stored on stack__.
|
||||
So function calling will be faster than before.
|
||||
Because in v8.0 when calling a function,
|
||||
new `vm_vec` will be allocated by `nasal_gc`, this makes gc doing mark-sweep too many times and spends a quite lot of time.
|
||||
In test file `test/bf.nas`, it takes too much time to test the file because this file has too many function calls(see test data below in table `version 8.0 (R9-5900HX ubuntu-WSL 2022/1/23)`).
|
||||
|
||||
Upvalue now is generated when creating first new function in the local scope, using `vm_vec`.
|
||||
And after that when creating new functions, they share the same upvalue, and the upvalue will synchronize with the local scope each time creating a new function.
|
||||
|
||||
## Benchmark
|
||||
|
||||
### version 6.5 (i5-8250U windows10 2021/6/19)
|
||||
|
@ -702,8 +736,9 @@ running time:
|
|||
|bf.nas|1100.19s||
|
||||
|mandel.nas|28.98s||
|
||||
|life.nas|0.857s(windows) 0.56(ubuntu WSL)||
|
||||
|ycombinator.nas|0.64s||
|
||||
|fib.nas|0.28s||
|
||||
|bfs.nas|0.156s|changed test file|
|
||||
|bfs.nas|0.156s|random result|
|
||||
|pi.nas|0.0625s||
|
||||
|bigloop.nas|0.047s||
|
||||
|calc.nas|0.03125s|changed test file|
|
||||
|
@ -711,10 +746,30 @@ running time:
|
|||
|ascii-art.nas|0s||
|
||||
|quick_sort.nas|0s||
|
||||
|
||||
### version 9.0 (R9-5900HX ubuntu-WSL 2022/2/13)
|
||||
|
||||
running time:
|
||||
|
||||
|file|total time|info|
|
||||
|:----|:----|:----|
|
||||
|bf.nas|276.55s|great improvement|
|
||||
|mandel.nas|28.16s||
|
||||
|ycombinator.nas|0.578s||
|
||||
|life.nas|0.649s(windows) 0.2(ubuntu WSL)||
|
||||
|fib.nas|0.234s|little improvement|
|
||||
|bfs.nas|0.14s|random result|
|
||||
|pi.nas|0.0625s||
|
||||
|bigloop.nas|0.047s||
|
||||
|calc.nas|0.0469s|changed test file|
|
||||
|quick_sort.nas|0.016s|changed test file:100->1e4|
|
||||
|mandelbrot.nas|0.0156s||
|
||||
|ascii-art.nas|0s||
|
||||
|
||||
## __Tutorial__
|
||||
|
||||
Nasal is really __easy__ to learn.
|
||||
Reading this tutorial will not takes you over 15 minutes.
|
||||
__If you have learnt C/C++/Javascript before, this will take less time.__
|
||||
You could totally use it after reading this simple tutorial:
|
||||
|
||||
### __basic value type__
|
||||
|
@ -1516,3 +1571,34 @@ If want help, input `h` to get help.
|
|||
<option> <filename> <line>
|
||||
bk, break | set break point
|
||||
```
|
||||
|
||||
When running the debugger, you could see what is on stack.
|
||||
This will help you debugging or learning how the vm works:
|
||||
|
||||
```bash
|
||||
source code:
|
||||
import("lib.nas");
|
||||
var fib=func(x)
|
||||
{
|
||||
--> if(x<2) return x;
|
||||
return fib(x-1)+fib(x-2);
|
||||
}
|
||||
for(var i=0;i<31;i+=1)
|
||||
print(fib(i),'\n');
|
||||
next bytecode:
|
||||
0x000002f0: para 0x3e ("x") (test/fib.nas:2)
|
||||
0x000002f1: jmp 0x301 (test/fib.nas:2)
|
||||
0x000002f2: calll 0x1 (test/fib.nas:4)
|
||||
--> 0x000002f3: lessc 0x2 (2) (test/fib.nas:4)
|
||||
0x000002f4: jf 0x2f7 (test/fib.nas:4)
|
||||
0x000002f5: calll 0x1 (test/fib.nas:4)
|
||||
0x000002f6: ret 0x0 (test/fib.nas:4)
|
||||
0x000002f7: callg 0x33 (test/fib.nas:5)
|
||||
vm stack(limit 5, total 6):
|
||||
| num | 0
|
||||
| addr | pc:0x30a
|
||||
| num | 0
|
||||
| nil |
|
||||
| func | <0xed92d0> entry:0x2f2
|
||||
>>
|
||||
```
|
||||
|
|
2
main.cpp
2
main.cpp
|
@ -35,7 +35,7 @@ void help()
|
|||
<<" | get garbage collector info if didn't crash.\n"
|
||||
<<" -op, --optimize| use optimizer(beta).\n"
|
||||
<<" | if want to use -op and run, please use -op -e/-t/-o/-d.\n"
|
||||
<<" -dbg, --debug | debug mode (this will ignore -t -o -d).\n"
|
||||
<<" -dbg, --debug | debug mode (this will ignore -t -o -d -e).\n"
|
||||
<<"file:\n"
|
||||
<<" input file name to execute script file.\n";
|
||||
}
|
||||
|
|
|
@ -210,10 +210,6 @@ void nasal_dbg::run(
|
|||
code.push_back(opr_table[i.op]);
|
||||
imm.push_back(i.num);
|
||||
}
|
||||
|
||||
// set canary and program counter
|
||||
canary=gc.stack+STACK_MAX_DEPTH-1;
|
||||
pc=0;
|
||||
// goto the first operand
|
||||
goto *code[pc];
|
||||
|
||||
|
|
|
@ -39,6 +39,7 @@ protected:
|
|||
void die(std::string);
|
||||
/* vm calculation functions*/
|
||||
bool condition(nasal_ref);
|
||||
/* vm operands */
|
||||
void opr_nop();
|
||||
void opr_intg();
|
||||
void opr_intl();
|
||||
|
@ -132,6 +133,9 @@ void nasal_vm::init(
|
|||
str_table=strs.data();
|
||||
files=filenames.data();
|
||||
files_size=filenames.size();
|
||||
/* set canary and program counter */
|
||||
canary=gc.stack+STACK_MAX_DEPTH-1;
|
||||
pc=0;
|
||||
}
|
||||
void nasal_vm::valinfo(nasal_ref& val)
|
||||
{
|
||||
|
@ -900,10 +904,6 @@ void nasal_vm::run(
|
|||
code.push_back(opr_table[i.op]);
|
||||
imm.push_back(i.num);
|
||||
}
|
||||
|
||||
// set canary and program counter
|
||||
canary=gc.stack+STACK_MAX_DEPTH-1;
|
||||
pc=0;
|
||||
// goto the first operand
|
||||
goto *code[pc];
|
||||
|
||||
|
|
|
@ -151,7 +151,7 @@ var bf=func(program)
|
|||
{
|
||||
var stack=[];
|
||||
var len=size(program);
|
||||
var f="import('lib.nas');\nvar ptr=0;\nvar paper=[];\nsetsize(paper,131072);\n";
|
||||
var f="#automatically generated by bfconvertor.nas\nimport('lib.nas');\nvar ptr=0;\nvar paper=[];\nsetsize(paper,131072);\n";
|
||||
for(var i=0;i<len;i+=1)
|
||||
{
|
||||
var c=chr(program[i]);
|
||||
|
|
|
@ -87,7 +87,7 @@ var calc=func(codetype,files){
|
|||
semi+=semi_cnt;
|
||||
}
|
||||
println('total: | ',line,' \tline | ',semi,' \tsemi');
|
||||
println('bytes: | ',bytes,'\tbytes| ',int(bytes/1024),' \tkb');
|
||||
println(' | ',bytes,'\tbytes| ',int(bytes/1024),' \tkb');
|
||||
}
|
||||
|
||||
calc("source code:",source);
|
||||
|
|
256
test/mandel.nas
256
test/mandel.nas
|
@ -1,3 +1,4 @@
|
|||
#automatically generated by bfconvertor.nas
|
||||
import('lib.nas');
|
||||
var ptr=0;
|
||||
var paper=[];
|
||||
|
@ -76,8 +77,7 @@ while(paper[ptr])
|
|||
}
|
||||
ptr+=7.000000;
|
||||
paper[ptr]+=1.000000;
|
||||
ptr+=26.000000;
|
||||
ptr+=1.000000;
|
||||
ptr+=27.000000;
|
||||
paper[ptr]+=1.000000;
|
||||
ptr-=17.000000;
|
||||
while(paper[ptr])
|
||||
|
@ -107,8 +107,7 @@ while(paper[ptr])
|
|||
{
|
||||
ptr-=9.000000;
|
||||
}
|
||||
ptr+=2.000000;
|
||||
ptr+=5.000000;
|
||||
ptr+=7.000000;
|
||||
while(paper[ptr])
|
||||
{
|
||||
paper[ptr]-=1.000000;
|
||||
|
@ -138,8 +137,7 @@ while(paper[ptr])
|
|||
while(paper[ptr])
|
||||
{
|
||||
paper[ptr]-=1.000000;
|
||||
ptr+=3.000000;
|
||||
ptr+=6.000000;
|
||||
ptr+=9.000000;
|
||||
paper[ptr]+=1.000000;
|
||||
ptr-=9.000000;
|
||||
}
|
||||
|
@ -162,8 +160,7 @@ while(paper[ptr])
|
|||
ptr+=6.000000;
|
||||
while(paper[ptr])
|
||||
{
|
||||
ptr+=5.000000;
|
||||
ptr+=2.000000;
|
||||
ptr+=7.000000;
|
||||
while(paper[ptr])
|
||||
{
|
||||
paper[ptr]-=1.000000;
|
||||
|
@ -218,8 +215,7 @@ while(paper[ptr])
|
|||
ptr-=9.000000;
|
||||
while(paper[ptr])
|
||||
{
|
||||
ptr-=7.000000;
|
||||
ptr-=2.000000;
|
||||
ptr-=9.000000;
|
||||
}
|
||||
ptr+=7.000000;
|
||||
while(paper[ptr])
|
||||
|
@ -368,8 +364,7 @@ while(paper[ptr])
|
|||
{
|
||||
ptr+=9.000000;
|
||||
}
|
||||
ptr-=7.000000;
|
||||
ptr-=2.000000;
|
||||
ptr-=9.000000;
|
||||
while(paper[ptr])
|
||||
{
|
||||
ptr+=1.000000;
|
||||
|
@ -443,8 +438,7 @@ while(paper[ptr])
|
|||
paper[ptr]+=1.000000;
|
||||
ptr-=9.000000;
|
||||
}
|
||||
ptr+=5.000000;
|
||||
ptr+=4.000000;
|
||||
ptr+=9.000000;
|
||||
while(paper[ptr])
|
||||
{
|
||||
ptr+=1.000000;
|
||||
|
@ -509,8 +503,7 @@ while(paper[ptr])
|
|||
ptr+=9.000000;
|
||||
while(paper[ptr])
|
||||
{
|
||||
ptr+=2.000000;
|
||||
ptr+=7.000000;
|
||||
ptr+=9.000000;
|
||||
}
|
||||
ptr-=9.000000;
|
||||
while(paper[ptr])
|
||||
|
@ -580,8 +573,7 @@ while(paper[ptr])
|
|||
paper[ptr]-=1.000000;
|
||||
ptr+=3.000000;
|
||||
paper[ptr]+=1.000000;
|
||||
ptr-=2.000000;
|
||||
ptr-=1.000000;
|
||||
ptr-=3.000000;
|
||||
}
|
||||
ptr-=1.000000;
|
||||
paper[ptr]+=1.000000;
|
||||
|
@ -596,8 +588,7 @@ while(paper[ptr])
|
|||
paper[ptr]-=1.000000;
|
||||
ptr-=36.000000;
|
||||
paper[ptr]+=1.000000;
|
||||
ptr+=13.000000;
|
||||
ptr+=23.000000;
|
||||
ptr+=36.000000;
|
||||
}
|
||||
ptr+=5.000000;
|
||||
}
|
||||
|
@ -612,8 +603,7 @@ while(paper[ptr])
|
|||
{
|
||||
while(paper[ptr])
|
||||
{
|
||||
ptr+=4.000000;
|
||||
ptr+=5.000000;
|
||||
ptr+=9.000000;
|
||||
}
|
||||
ptr-=9.000000;
|
||||
paper[ptr]-=1.000000;
|
||||
|
@ -631,8 +621,7 @@ while(paper[ptr])
|
|||
ptr-=3.000000;
|
||||
while(paper[ptr])
|
||||
{
|
||||
ptr-=6.000000;
|
||||
ptr-=3.000000;
|
||||
ptr-=9.000000;
|
||||
}
|
||||
ptr+=9.000000;
|
||||
while(paper[ptr])
|
||||
|
@ -669,8 +658,7 @@ while(paper[ptr])
|
|||
ptr-=13.000000;
|
||||
while(paper[ptr])
|
||||
{
|
||||
ptr-=5.000000;
|
||||
ptr-=4.000000;
|
||||
ptr-=9.000000;
|
||||
}
|
||||
ptr+=4.000000;
|
||||
while(paper[ptr])
|
||||
|
@ -716,8 +704,7 @@ while(paper[ptr])
|
|||
while(paper[ptr])
|
||||
{
|
||||
paper[ptr]-=1.000000;
|
||||
ptr+=1.000000;
|
||||
ptr+=2.000000;
|
||||
ptr+=3.000000;
|
||||
paper[ptr]+=1.000000;
|
||||
ptr-=12.000000;
|
||||
while(paper[ptr])
|
||||
|
@ -754,8 +741,7 @@ while(paper[ptr])
|
|||
{
|
||||
ptr+=9.000000;
|
||||
}
|
||||
ptr-=6.000000;
|
||||
ptr-=2.000000;
|
||||
ptr-=8.000000;
|
||||
}
|
||||
ptr+=8.000000;
|
||||
}
|
||||
|
@ -775,8 +761,7 @@ while(paper[ptr])
|
|||
ptr-=4.000000;
|
||||
}
|
||||
ptr+=9.000000;
|
||||
paper[ptr]+=19.000000;
|
||||
paper[ptr]+=7.000000;
|
||||
paper[ptr]+=26.000000;
|
||||
ptr+=2.000000;
|
||||
while(paper[ptr])
|
||||
{
|
||||
|
@ -898,8 +883,7 @@ while(paper[ptr])
|
|||
while(paper[ptr])
|
||||
{
|
||||
paper[ptr]-=1.000000;
|
||||
ptr-=8.000000;
|
||||
ptr-=1.000000;
|
||||
ptr-=9.000000;
|
||||
paper[ptr]+=1.000000;
|
||||
ptr+=9.000000;
|
||||
}
|
||||
|
@ -979,8 +963,7 @@ while(paper[ptr])
|
|||
paper[ptr]+=1.000000;
|
||||
ptr+=8.000000;
|
||||
}
|
||||
ptr-=3.000000;
|
||||
ptr-=6.000000;
|
||||
ptr-=9.000000;
|
||||
while(paper[ptr])
|
||||
{
|
||||
ptr-=9.000000;
|
||||
|
@ -1016,8 +999,7 @@ while(paper[ptr])
|
|||
paper[ptr]+=1.000000;
|
||||
ptr+=2.000000;
|
||||
}
|
||||
ptr-=1.000000;
|
||||
ptr-=1.000000;
|
||||
ptr-=2.000000;
|
||||
while(paper[ptr])
|
||||
{
|
||||
paper[ptr]-=1.000000;
|
||||
|
@ -1048,8 +1030,7 @@ while(paper[ptr])
|
|||
while(paper[ptr])
|
||||
{
|
||||
paper[ptr]-=1.000000;
|
||||
ptr+=4.000000;
|
||||
ptr+=5.000000;
|
||||
ptr+=9.000000;
|
||||
paper[ptr]+=1.000000;
|
||||
ptr-=9.000000;
|
||||
}
|
||||
|
@ -1123,8 +1104,7 @@ while(paper[ptr])
|
|||
while(paper[ptr])
|
||||
{
|
||||
paper[ptr]-=1.000000;
|
||||
ptr-=1.000000;
|
||||
ptr-=4.000000;
|
||||
ptr-=5.000000;
|
||||
paper[ptr]+=1.000000;
|
||||
ptr+=5.000000;
|
||||
}
|
||||
|
@ -1313,8 +1293,7 @@ while(paper[ptr])
|
|||
paper[ptr]-=1.000000;
|
||||
ptr-=36.000000;
|
||||
paper[ptr]+=1.000000;
|
||||
ptr+=1.000000;
|
||||
ptr+=35.000000;
|
||||
ptr+=36.000000;
|
||||
}
|
||||
ptr+=6.000000;
|
||||
}
|
||||
|
@ -1324,8 +1303,7 @@ while(paper[ptr])
|
|||
ptr-=9.000000;
|
||||
}
|
||||
ptr+=9.000000;
|
||||
paper[ptr]+=8.000000;
|
||||
paper[ptr]+=7.000000;
|
||||
paper[ptr]+=15.000000;
|
||||
while(paper[ptr])
|
||||
{
|
||||
while(paper[ptr])
|
||||
|
@ -1415,8 +1393,7 @@ while(paper[ptr])
|
|||
while(paper[ptr])
|
||||
{
|
||||
paper[ptr]-=1.000000;
|
||||
ptr-=1.000000;
|
||||
ptr-=4.000000;
|
||||
ptr-=5.000000;
|
||||
paper[ptr]+=1.000000;
|
||||
ptr+=5.000000;
|
||||
}
|
||||
|
@ -1550,8 +1527,7 @@ while(paper[ptr])
|
|||
ptr-=11.000000;
|
||||
while(paper[ptr])
|
||||
{
|
||||
ptr-=5.000000;
|
||||
ptr-=4.000000;
|
||||
ptr-=9.000000;
|
||||
}
|
||||
ptr+=4.000000;
|
||||
while(paper[ptr])
|
||||
|
@ -1629,8 +1605,7 @@ while(paper[ptr])
|
|||
}
|
||||
ptr+=8.000000;
|
||||
}
|
||||
ptr-=5.000000;
|
||||
ptr-=3.000000;
|
||||
ptr-=8.000000;
|
||||
paper[ptr]+=1.000000;
|
||||
ptr-=1.000000;
|
||||
while(paper[ptr])
|
||||
|
@ -1665,8 +1640,7 @@ while(paper[ptr])
|
|||
paper[ptr]-=1.000000;
|
||||
ptr+=3.000000;
|
||||
paper[ptr]-=1.000000;
|
||||
ptr-=9.000000;
|
||||
ptr-=5.000000;
|
||||
ptr-=14.000000;
|
||||
paper[ptr]+=1.000000;
|
||||
ptr+=11.000000;
|
||||
}
|
||||
|
@ -1698,8 +1672,7 @@ while(paper[ptr])
|
|||
paper[ptr]+=1.000000;
|
||||
ptr-=3.000000;
|
||||
}
|
||||
ptr-=2.000000;
|
||||
ptr-=10.000000;
|
||||
ptr-=12.000000;
|
||||
}
|
||||
ptr+=4.000000;
|
||||
while(paper[ptr])
|
||||
|
@ -1745,8 +1718,7 @@ while(paper[ptr])
|
|||
}
|
||||
ptr+=8.000000;
|
||||
}
|
||||
ptr-=3.000000;
|
||||
ptr-=5.000000;
|
||||
ptr-=8.000000;
|
||||
paper[ptr]+=1.000000;
|
||||
ptr-=1.000000;
|
||||
while(paper[ptr])
|
||||
|
@ -1781,8 +1753,7 @@ while(paper[ptr])
|
|||
paper[ptr]-=1.000000;
|
||||
ptr+=4.000000;
|
||||
paper[ptr]-=1.000000;
|
||||
ptr-=7.000000;
|
||||
ptr-=7.000000;
|
||||
ptr-=14.000000;
|
||||
paper[ptr]+=1.000000;
|
||||
ptr+=10.000000;
|
||||
}
|
||||
|
@ -1905,8 +1876,7 @@ while(paper[ptr])
|
|||
paper[ptr]+=1.000000;
|
||||
ptr-=3.000000;
|
||||
}
|
||||
ptr-=7.000000;
|
||||
ptr-=5.000000;
|
||||
ptr-=12.000000;
|
||||
}
|
||||
}
|
||||
ptr+=1.000000;
|
||||
|
@ -1951,8 +1921,7 @@ while(paper[ptr])
|
|||
while(paper[ptr])
|
||||
{
|
||||
paper[ptr]-=1.000000;
|
||||
ptr-=1.000000;
|
||||
ptr-=3.000000;
|
||||
ptr-=4.000000;
|
||||
paper[ptr]+=1.000000;
|
||||
ptr+=4.000000;
|
||||
}
|
||||
|
@ -2102,8 +2071,7 @@ while(paper[ptr])
|
|||
{
|
||||
ptr+=9.000000;
|
||||
}
|
||||
ptr-=8.000000;
|
||||
ptr-=1.000000;
|
||||
ptr-=9.000000;
|
||||
while(paper[ptr])
|
||||
{
|
||||
ptr+=1.000000;
|
||||
|
@ -2188,8 +2156,7 @@ while(paper[ptr])
|
|||
paper[ptr]+=1.000000;
|
||||
ptr+=36.000000;
|
||||
}
|
||||
ptr+=1.000000;
|
||||
ptr+=5.000000;
|
||||
ptr+=6.000000;
|
||||
}
|
||||
ptr-=9.000000;
|
||||
while(paper[ptr])
|
||||
|
@ -2211,8 +2178,7 @@ while(paper[ptr])
|
|||
}
|
||||
ptr-=9.000000;
|
||||
paper[ptr]-=1.000000;
|
||||
ptr-=5.000000;
|
||||
ptr-=4.000000;
|
||||
ptr-=9.000000;
|
||||
while(paper[ptr])
|
||||
{
|
||||
ptr-=9.000000;
|
||||
|
@ -2252,8 +2218,7 @@ while(paper[ptr])
|
|||
paper[ptr]-=1.000000;
|
||||
ptr+=4.000000;
|
||||
paper[ptr]+=1.000000;
|
||||
ptr-=5.000000;
|
||||
ptr-=8.000000;
|
||||
ptr-=13.000000;
|
||||
while(paper[ptr])
|
||||
{
|
||||
ptr-=9.000000;
|
||||
|
@ -2337,8 +2302,7 @@ while(paper[ptr])
|
|||
ptr-=1.000000;
|
||||
while(paper[ptr])
|
||||
{
|
||||
ptr+=2.000000;
|
||||
ptr+=7.000000;
|
||||
ptr+=9.000000;
|
||||
}
|
||||
ptr-=8.000000;
|
||||
}
|
||||
|
@ -2491,8 +2455,7 @@ while(paper[ptr])
|
|||
paper[ptr]+=1.000000;
|
||||
ptr-=2.000000;
|
||||
}
|
||||
ptr+=2.000000;
|
||||
ptr+=6.000000;
|
||||
ptr+=8.000000;
|
||||
}
|
||||
ptr-=8.000000;
|
||||
paper[ptr]+=1.000000;
|
||||
|
@ -2531,8 +2494,7 @@ while(paper[ptr])
|
|||
paper[ptr]-=1.000000;
|
||||
ptr-=10.000000;
|
||||
paper[ptr]+=1.000000;
|
||||
ptr+=4.000000;
|
||||
ptr+=7.000000;
|
||||
ptr+=11.000000;
|
||||
}
|
||||
ptr-=2.000000;
|
||||
}
|
||||
|
@ -2610,8 +2572,7 @@ while(paper[ptr])
|
|||
while(paper[ptr])
|
||||
{
|
||||
paper[ptr]-=1.000000;
|
||||
ptr-=5.000000;
|
||||
ptr-=1.000000;
|
||||
ptr-=6.000000;
|
||||
paper[ptr]+=1.000000;
|
||||
ptr+=6.000000;
|
||||
}
|
||||
|
@ -2642,8 +2603,7 @@ while(paper[ptr])
|
|||
paper[ptr]-=1.000000;
|
||||
ptr-=4.000000;
|
||||
paper[ptr]+=1.000000;
|
||||
ptr+=4.000000;
|
||||
ptr+=1.000000;
|
||||
ptr+=5.000000;
|
||||
}
|
||||
ptr+=2.000000;
|
||||
while(paper[ptr])
|
||||
|
@ -2687,8 +2647,7 @@ while(paper[ptr])
|
|||
paper[ptr]-=1.000000;
|
||||
ptr+=5.000000;
|
||||
paper[ptr]+=1.000000;
|
||||
ptr-=2.000000;
|
||||
ptr-=3.000000;
|
||||
ptr-=5.000000;
|
||||
}
|
||||
paper[ptr]+=1.000000;
|
||||
ptr+=4.000000;
|
||||
|
@ -2738,8 +2697,7 @@ while(paper[ptr])
|
|||
paper[ptr]-=1.000000;
|
||||
ptr+=2.000000;
|
||||
paper[ptr]+=1.000000;
|
||||
ptr-=2.000000;
|
||||
ptr-=9.000000;
|
||||
ptr-=11.000000;
|
||||
while(paper[ptr])
|
||||
{
|
||||
ptr-=9.000000;
|
||||
|
@ -2784,8 +2742,7 @@ while(paper[ptr])
|
|||
paper[ptr]+=1.000000;
|
||||
ptr+=3.000000;
|
||||
}
|
||||
ptr-=1.000000;
|
||||
ptr-=2.000000;
|
||||
ptr-=3.000000;
|
||||
while(paper[ptr])
|
||||
{
|
||||
paper[ptr]-=1.000000;
|
||||
|
@ -2826,8 +2783,7 @@ while(paper[ptr])
|
|||
{
|
||||
ptr+=9.000000;
|
||||
}
|
||||
ptr-=1.000000;
|
||||
ptr-=7.000000;
|
||||
ptr-=8.000000;
|
||||
}
|
||||
ptr+=8.000000;
|
||||
}
|
||||
|
@ -2972,8 +2928,7 @@ while(paper[ptr])
|
|||
paper[ptr]-=1.000000;
|
||||
ptr-=4.000000;
|
||||
paper[ptr]+=1.000000;
|
||||
ptr+=1.000000;
|
||||
ptr+=3.000000;
|
||||
ptr+=4.000000;
|
||||
}
|
||||
ptr-=4.000000;
|
||||
while(paper[ptr])
|
||||
|
@ -3087,8 +3042,7 @@ while(paper[ptr])
|
|||
paper[ptr]-=1.000000;
|
||||
ptr-=4.000000;
|
||||
paper[ptr]+=1.000000;
|
||||
ptr+=2.000000;
|
||||
ptr+=2.000000;
|
||||
ptr+=4.000000;
|
||||
}
|
||||
ptr-=4.000000;
|
||||
while(paper[ptr])
|
||||
|
@ -3122,8 +3076,7 @@ while(paper[ptr])
|
|||
ptr+=9.000000;
|
||||
while(paper[ptr])
|
||||
{
|
||||
ptr+=6.000000;
|
||||
ptr+=3.000000;
|
||||
ptr+=9.000000;
|
||||
}
|
||||
ptr-=9.000000;
|
||||
while(paper[ptr])
|
||||
|
@ -3158,8 +3111,7 @@ while(paper[ptr])
|
|||
paper[ptr]-=1.000000;
|
||||
ptr+=2.000000;
|
||||
paper[ptr]-=1.000000;
|
||||
ptr-=8.000000;
|
||||
ptr-=5.000000;
|
||||
ptr-=13.000000;
|
||||
paper[ptr]+=1.000000;
|
||||
ptr+=11.000000;
|
||||
}
|
||||
|
@ -3191,8 +3143,7 @@ while(paper[ptr])
|
|||
paper[ptr]+=1.000000;
|
||||
ptr-=2.000000;
|
||||
}
|
||||
ptr-=8.000000;
|
||||
ptr-=4.000000;
|
||||
ptr-=12.000000;
|
||||
}
|
||||
}
|
||||
ptr+=9.000000;
|
||||
|
@ -3287,8 +3238,7 @@ while(paper[ptr])
|
|||
{
|
||||
while(paper[ptr])
|
||||
{
|
||||
ptr+=4.000000;
|
||||
ptr+=5.000000;
|
||||
ptr+=9.000000;
|
||||
}
|
||||
paper[ptr]+=1.000000;
|
||||
ptr+=1.000000;
|
||||
|
@ -3349,8 +3299,7 @@ while(paper[ptr])
|
|||
{
|
||||
ptr+=1.000000;
|
||||
paper[ptr]+=1.000000;
|
||||
ptr+=2.000000;
|
||||
ptr+=6.000000;
|
||||
ptr+=8.000000;
|
||||
}
|
||||
ptr-=9.000000;
|
||||
while(paper[ptr])
|
||||
|
@ -3517,8 +3466,7 @@ while(paper[ptr])
|
|||
paper[ptr]-=1.000000;
|
||||
ptr+=5.000000;
|
||||
paper[ptr]+=1.000000;
|
||||
ptr-=4.000000;
|
||||
ptr-=2.000000;
|
||||
ptr-=6.000000;
|
||||
while(paper[ptr])
|
||||
{
|
||||
paper[ptr]-=1.000000;
|
||||
|
@ -3552,8 +3500,7 @@ while(paper[ptr])
|
|||
ptr+=9.000000;
|
||||
while(paper[ptr])
|
||||
{
|
||||
ptr+=6.000000;
|
||||
ptr+=3.000000;
|
||||
ptr+=9.000000;
|
||||
}
|
||||
ptr-=9.000000;
|
||||
while(paper[ptr])
|
||||
|
@ -3578,8 +3525,7 @@ while(paper[ptr])
|
|||
}
|
||||
ptr-=2.000000;
|
||||
paper[ptr]+=1.000000;
|
||||
ptr+=3.000000;
|
||||
ptr+=5.000000;
|
||||
ptr+=8.000000;
|
||||
}
|
||||
ptr-=9.000000;
|
||||
while(paper[ptr])
|
||||
|
@ -3639,8 +3585,7 @@ while(paper[ptr])
|
|||
paper[ptr]-=1.000000;
|
||||
ptr-=36.000000;
|
||||
paper[ptr]+=1.000000;
|
||||
ptr+=17.000000;
|
||||
ptr+=19.000000;
|
||||
ptr+=36.000000;
|
||||
}
|
||||
ptr+=5.000000;
|
||||
}
|
||||
|
@ -3655,8 +3600,7 @@ while(paper[ptr])
|
|||
{
|
||||
while(paper[ptr])
|
||||
{
|
||||
ptr+=8.000000;
|
||||
ptr+=1.000000;
|
||||
ptr+=9.000000;
|
||||
}
|
||||
ptr-=9.000000;
|
||||
paper[ptr]-=1.000000;
|
||||
|
@ -3759,8 +3703,7 @@ while(paper[ptr])
|
|||
paper[ptr]-=1.000000;
|
||||
ptr+=3.000000;
|
||||
paper[ptr]+=1.000000;
|
||||
ptr-=1.000000;
|
||||
ptr-=11.000000;
|
||||
ptr-=12.000000;
|
||||
while(paper[ptr])
|
||||
{
|
||||
ptr-=9.000000;
|
||||
|
@ -3797,8 +3740,7 @@ while(paper[ptr])
|
|||
}
|
||||
ptr-=8.000000;
|
||||
}
|
||||
ptr+=1.000000;
|
||||
ptr+=7.000000;
|
||||
ptr+=8.000000;
|
||||
}
|
||||
ptr-=9.000000;
|
||||
while(paper[ptr])
|
||||
|
@ -3962,8 +3904,7 @@ while(paper[ptr])
|
|||
paper[ptr]+=1.000000;
|
||||
ptr+=9.000000;
|
||||
paper[ptr]+=1.000000;
|
||||
ptr-=8.000000;
|
||||
ptr-=6.000000;
|
||||
ptr-=14.000000;
|
||||
while(paper[ptr])
|
||||
{
|
||||
ptr-=9.000000;
|
||||
|
@ -3991,8 +3932,7 @@ while(paper[ptr])
|
|||
{
|
||||
ptr+=9.000000;
|
||||
}
|
||||
ptr-=5.000000;
|
||||
ptr-=4.000000;
|
||||
ptr-=9.000000;
|
||||
while(paper[ptr])
|
||||
{
|
||||
ptr+=7.000000;
|
||||
|
@ -4022,8 +3962,7 @@ while(paper[ptr])
|
|||
paper[ptr]+=1.000000;
|
||||
ptr+=3.000000;
|
||||
}
|
||||
ptr-=4.000000;
|
||||
ptr-=6.000000;
|
||||
ptr-=10.000000;
|
||||
}
|
||||
}
|
||||
ptr+=7.000000;
|
||||
|
@ -4057,8 +3996,7 @@ while(paper[ptr])
|
|||
while(paper[ptr])
|
||||
{
|
||||
paper[ptr]-=1.000000;
|
||||
ptr+=3.000000;
|
||||
ptr+=1.000000;
|
||||
ptr+=4.000000;
|
||||
paper[ptr]+=1.000000;
|
||||
ptr-=4.000000;
|
||||
}
|
||||
|
@ -4084,8 +4022,7 @@ while(paper[ptr])
|
|||
{
|
||||
ptr+=9.000000;
|
||||
}
|
||||
ptr-=5.000000;
|
||||
ptr-=4.000000;
|
||||
ptr-=9.000000;
|
||||
while(paper[ptr])
|
||||
{
|
||||
ptr+=1.000000;
|
||||
|
@ -4163,8 +4100,7 @@ while(paper[ptr])
|
|||
ptr+=2.000000;
|
||||
while(paper[ptr])
|
||||
{
|
||||
ptr+=2.000000;
|
||||
ptr+=3.000000;
|
||||
ptr+=5.000000;
|
||||
while(paper[ptr])
|
||||
{
|
||||
paper[ptr]-=1.000000;
|
||||
|
@ -4211,8 +4147,7 @@ while(paper[ptr])
|
|||
}
|
||||
ptr+=7.000000;
|
||||
}
|
||||
ptr-=2.000000;
|
||||
ptr-=4.000000;
|
||||
ptr-=6.000000;
|
||||
while(paper[ptr])
|
||||
{
|
||||
paper[ptr]-=1.000000;
|
||||
|
@ -4240,8 +4175,7 @@ while(paper[ptr])
|
|||
}
|
||||
ptr+=4.000000;
|
||||
paper[ptr]+=1.000000;
|
||||
ptr-=3.000000;
|
||||
ptr-=2.000000;
|
||||
ptr-=5.000000;
|
||||
while(paper[ptr])
|
||||
{
|
||||
ptr-=9.000000;
|
||||
|
@ -4272,8 +4206,7 @@ while(paper[ptr])
|
|||
paper[ptr]+=1.000000;
|
||||
ptr+=7.000000;
|
||||
}
|
||||
ptr-=4.000000;
|
||||
ptr-=3.000000;
|
||||
ptr-=7.000000;
|
||||
while(paper[ptr])
|
||||
{
|
||||
paper[ptr]-=1.000000;
|
||||
|
@ -4305,8 +4238,7 @@ while(paper[ptr])
|
|||
while(paper[ptr])
|
||||
{
|
||||
paper[ptr]-=1.000000;
|
||||
ptr-=1.000000;
|
||||
ptr-=6.000000;
|
||||
ptr-=7.000000;
|
||||
paper[ptr]-=1.000000;
|
||||
ptr+=7.000000;
|
||||
}
|
||||
|
@ -4334,8 +4266,7 @@ while(paper[ptr])
|
|||
ptr-=14.000000;
|
||||
while(paper[ptr])
|
||||
{
|
||||
ptr-=3.000000;
|
||||
ptr-=6.000000;
|
||||
ptr-=9.000000;
|
||||
}
|
||||
ptr+=3.000000;
|
||||
while(paper[ptr])
|
||||
|
@ -4371,8 +4302,7 @@ while(paper[ptr])
|
|||
}
|
||||
ptr+=8.000000;
|
||||
}
|
||||
ptr-=7.000000;
|
||||
ptr-=2.000000;
|
||||
ptr-=9.000000;
|
||||
while(paper[ptr])
|
||||
{
|
||||
ptr-=9.000000;
|
||||
|
@ -4401,8 +4331,7 @@ while(paper[ptr])
|
|||
ptr-=5.000000;
|
||||
while(paper[ptr])
|
||||
{
|
||||
ptr-=7.000000;
|
||||
ptr-=2.000000;
|
||||
ptr-=9.000000;
|
||||
}
|
||||
}
|
||||
ptr+=3.000000;
|
||||
|
@ -4432,8 +4361,7 @@ while(paper[ptr])
|
|||
while(paper[ptr])
|
||||
{
|
||||
paper[ptr]-=1.000000;
|
||||
ptr+=8.000000;
|
||||
ptr+=1.000000;
|
||||
ptr+=9.000000;
|
||||
paper[ptr]+=1.000000;
|
||||
ptr-=9.000000;
|
||||
}
|
||||
|
@ -4452,8 +4380,7 @@ while(paper[ptr])
|
|||
while(paper[ptr])
|
||||
{
|
||||
paper[ptr]-=1.000000;
|
||||
ptr-=6.000000;
|
||||
ptr-=2.000000;
|
||||
ptr-=8.000000;
|
||||
paper[ptr]+=1.000000;
|
||||
ptr+=8.000000;
|
||||
}
|
||||
|
@ -4481,8 +4408,7 @@ while(paper[ptr])
|
|||
paper[ptr]-=1.000000;
|
||||
ptr-=7.000000;
|
||||
paper[ptr]+=1.000000;
|
||||
ptr+=6.000000;
|
||||
ptr+=1.000000;
|
||||
ptr+=7.000000;
|
||||
}
|
||||
ptr-=7.000000;
|
||||
while(paper[ptr])
|
||||
|
@ -4510,8 +4436,7 @@ while(paper[ptr])
|
|||
while(paper[ptr])
|
||||
{
|
||||
paper[ptr]-=1.000000;
|
||||
ptr-=5.000000;
|
||||
ptr-=3.000000;
|
||||
ptr-=8.000000;
|
||||
paper[ptr]+=1.000000;
|
||||
ptr+=8.000000;
|
||||
}
|
||||
|
@ -4542,8 +4467,7 @@ while(paper[ptr])
|
|||
paper[ptr]+=1.000000;
|
||||
ptr-=5.000000;
|
||||
}
|
||||
ptr+=6.000000;
|
||||
ptr+=2.000000;
|
||||
ptr+=8.000000;
|
||||
}
|
||||
ptr-=1.000000;
|
||||
paper[ptr]+=1.000000;
|
||||
|
@ -4612,8 +4536,7 @@ while(paper[ptr])
|
|||
}
|
||||
ptr-=1.000000;
|
||||
paper[ptr]+=1.000000;
|
||||
ptr-=6.000000;
|
||||
ptr-=3.000000;
|
||||
ptr-=9.000000;
|
||||
}
|
||||
ptr+=8.000000;
|
||||
paper[ptr]-=1.000000;
|
||||
|
@ -4644,8 +4567,7 @@ while(paper[ptr])
|
|||
ptr+=1.000000;
|
||||
while(paper[ptr])
|
||||
{
|
||||
ptr+=3.000000;
|
||||
ptr+=3.000000;
|
||||
ptr+=6.000000;
|
||||
while(paper[ptr])
|
||||
{
|
||||
paper[ptr]-=1.000000;
|
||||
|
@ -4692,8 +4614,7 @@ while(paper[ptr])
|
|||
}
|
||||
ptr+=8.000000;
|
||||
}
|
||||
ptr-=2.000000;
|
||||
ptr-=5.000000;
|
||||
ptr-=7.000000;
|
||||
while(paper[ptr])
|
||||
{
|
||||
paper[ptr]-=1.000000;
|
||||
|
@ -4740,8 +4661,7 @@ while(paper[ptr])
|
|||
ptr+=6.000000;
|
||||
}
|
||||
paper[ptr]+=1.000000;
|
||||
ptr-=1.000000;
|
||||
ptr-=5.000000;
|
||||
ptr-=6.000000;
|
||||
while(paper[ptr])
|
||||
{
|
||||
paper[ptr]-=1.000000;
|
||||
|
@ -4764,8 +4684,7 @@ while(paper[ptr])
|
|||
ptr-=17.000000;
|
||||
while(paper[ptr])
|
||||
{
|
||||
ptr-=7.000000;
|
||||
ptr-=2.000000;
|
||||
ptr-=9.000000;
|
||||
}
|
||||
ptr+=4.000000;
|
||||
while(paper[ptr])
|
||||
|
@ -4827,8 +4746,7 @@ while(paper[ptr])
|
|||
ptr+=6.000000;
|
||||
while(paper[ptr])
|
||||
{
|
||||
ptr+=6.000000;
|
||||
ptr+=3.000000;
|
||||
ptr+=9.000000;
|
||||
}
|
||||
ptr+=1.000000;
|
||||
while(paper[ptr])
|
||||
|
@ -4864,8 +4782,7 @@ while(paper[ptr])
|
|||
paper[ptr]-=1.000000;
|
||||
}
|
||||
ptr-=3.000000;
|
||||
paper[ptr]+=4.000000;
|
||||
paper[ptr]+=1.000000;
|
||||
paper[ptr]+=5.000000;
|
||||
while(paper[ptr])
|
||||
{
|
||||
paper[ptr]-=1.000000;
|
||||
|
@ -4885,8 +4802,7 @@ while(paper[ptr])
|
|||
ptr-=6.000000;
|
||||
while(paper[ptr])
|
||||
{
|
||||
ptr-=4.000000;
|
||||
ptr-=5.000000;
|
||||
ptr-=9.000000;
|
||||
}
|
||||
}
|
||||
ptr+=3.000000;
|
||||
|
|
Loading…
Reference in New Issue