CN110826032A - 一种基于AST的Javascript混淆方法 - Google Patents
一种基于AST的Javascript混淆方法 Download PDFInfo
- Publication number
- CN110826032A CN110826032A CN201911069021.8A CN201911069021A CN110826032A CN 110826032 A CN110826032 A CN 110826032A CN 201911069021 A CN201911069021 A CN 201911069021A CN 110826032 A CN110826032 A CN 110826032A
- Authority
- CN
- China
- Prior art keywords
- node
- code
- javascript file
- javascript
- file
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Withdrawn
Links
- 238000000034 method Methods 0.000 title claims abstract description 31
- 230000006835 compression Effects 0.000 claims description 15
- 238000007906 compression Methods 0.000 claims description 15
- 230000005540 biological transmission Effects 0.000 claims description 12
- 238000000354 decomposition reaction Methods 0.000 claims description 8
- 230000006798 recombination Effects 0.000 claims description 4
- 238000005215 recombination Methods 0.000 claims description 4
- 230000006870 function Effects 0.000 description 45
- 230000008569 process Effects 0.000 description 7
- 238000005516 engineering process Methods 0.000 description 3
- 230000009471 action Effects 0.000 description 2
- 238000010276 construction Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000007373 indentation Methods 0.000 description 2
- 238000007639 printing Methods 0.000 description 2
- 230000008707 rearrangement Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 238000009434 installation Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
- G06F21/14—Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Multimedia (AREA)
- Technology Law (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开一种基于AST的Javascript混淆方法,涉及数据保护技术领域;根据抽象语法树将Javascript文件分解成若干节点,不同形式的语句分为不同的节点类型,将Javascript文件的代码进行压缩,并根据不同的节点类型将Javascript文件的代码重新组合,其中利用插入无用代码的方式随机生成一段代码插入到Javascript文件的原代码的任意位置中,进行代码重新组合;和/或利用.操作符替换的方式将Javascript文件的代码重新组合,和/或利用函数参数去除的方式将Javascript文件的代码重新组合,实现Javascript混淆。
Description
技术领域
本发明公开一种基于AST的Javascript混淆方法,涉及数据保护技术领域。
背景技术
当前互联网技术发展迅速,PC端、移动端互联网应用技术呈指数增长,与此同时带来了关键技术代码泄漏问题。对于大多数WEB项目,可分为独立的前端、后端两部分,后端代码通常由编译器编译为字节码文件后运行,如Java的.class文件,使用者无法直接看到源代码实现,从而保护了代码的安全。然而对于前端代码,Javascript是由浏览器直接解释执行,可以轻易的通过F12或Ctrl+U查看源代码,即使是移动端应用,也可以通过解压apk安装包的方式获取源代码,因此,Javascript代码非常容易泄露,已被窃取和篡改。
抽象语法树(Abstract Syntax Tree,AST),或简称语法树(Syntax tree),是源代码语法结构的一种抽象表示。它以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构。
本发明提供一种基于AST的Javascript混淆方法,利用AST抽象语法树原理,对Javascript代码进行分析、拆解,将代码按照既定方式重新组合,以此实现代码压缩和代码转义功能,降低其可读性,保护互联网应用前端页面不被窃取、篡改。
发明内容
本发明针对现有技术的问题,提供一种基于AST的Javascript混淆方法,实现了Javascript代码混淆功能,通过对代码的压缩和转义,生成难以被人阅读的同时,从而达到保护代码的目的。
本发明提出的具体方案是:
一种基于AST的Javascript混淆方法,根据抽象语法树将Javascript文件分解成若干节点,不同形式的语句分为不同的节点类型,将Javascript文件的代码进行压缩,并根据不同的节点类型将Javascript文件的代码重新组合,
其中利用插入无用代码的方式随机生成一段代码插入到Javascript文件的原代码的任意位置中,进行代码重新组合;
和/或利用.操作符替换的方式将Javascript文件的代码重新组合,
和/或利用函数参数去除的方式将Javascript文件的代码重新组合,
实现Javascript混淆。
所述的方法中Javascript文件的语句包括以下形式:EmptyStatement、ExpressionStatement、VariableDeclaration、FunctionDeclaration、WhileStatement、DoWhileStatement、IfStatement、SwitchStatement、BlockStatement、ReturnStatement、BreakStatement、ContinueStatement、ForStatement、ForInStatement及ForOfStatement。
所述的方法中函数参数去除的方式是:将函数声明中需要传参的函数的参数删除,而在函数体中声明同名变量,并初始化为传参实际值。
所述的方法中通过去除不必要的空格和换行回车,将Javascript文件的代码进行压缩。
所述的方法中Javascript文件分解成若干节点,判断当前节点是否为已知节点,若不是已知节点,则按照Javascript文件的源文件的内容输出;若是已知节点,则判断所述的已知节点是子节点还是父节点,根据已知节点的类型进行代码重新组合的处理。
一种基于AST的Javascript混淆工具,包括分解模块、压缩模块及处理模块,
分解模块根据抽象语法树将Javascript文件分解成若干节点,不同形式的语句分为不同的节点类型,压缩模块将Javascript文件的代码进行压缩,处理模块根据不同的节点类型将Javascript文件的代码重新组合,
其中利用插入无用代码的方式随机生成一段代码插入到Javascript文件的原代码的任意位置中,进行代码重新组合;
和/或利用.操作符替换的方式将Javascript文件的代码重新组合,
和/或利用函数参数去除的方式将Javascript文件的代码重新组合,
实现Javascript混淆。
所述的工具中处理模块中函数参数去除的方式是:将函数声明中需要传参的函数的参数删除,而在函数体中声明同名变量,并初始化为传参实际值。
所述的工具中压缩模块通过去除不必要的空格和换行回车,将Javascript文件的代码进行压缩。
所述的工具中分解模块将Javascript文件分解成若干节点,判断当前节点是否为已知节点,若不是已知节点,则按照Javascript文件的源文件的内容输出;若是已知节点,则判断所述的已知节点是子节点还是父节点,根据已知节点的类型进行代码重新组合的处理。
本发明的有益之处是:
本发明提供一种基于AST的Javascript混淆方法,根据抽象语法树将Javascript文件分解成若干节点,不同形式的语句有不同的节点类型,根据节点类型的不同分别进行压缩、简化、转义等操作,产生对应的输出文件,在大幅度降低源文件代码的可读性的同时,保证代码运行效率和运行正确性,从而实现Javascript混淆,可以保证关键代码不被窃取、篡改,具有很高的应用价值。
附图说明
图1是本发明方法流程示意图;
图2是本发明操作流程示意图。
具体实施方式
本发明提供一种基于AST的Javascript混淆方法,根据抽象语法树将Javascript文件分解成若干节点,不同形式的语句分为不同的节点类型,将Javascript文件的代码进行压缩,并根据不同的节点类型将Javascript文件的代码重新组合,
其中利用插入无用代码的方式随机生成一段代码插入到Javascript文件的原代码的任意位置中,进行代码重新组合;
和/或利用.操作符替换的方式将Javascript文件的代码重新组合,
和/或利用函数参数去除的方式将Javascript文件的代码重新组合,
实现Javascript混淆。
同时提供与上述方法相应的一种基于AST的Javascript混淆工具,包括分解模块、压缩模块及处理模块,
分解模块根据抽象语法树将Javascript文件分解成若干节点,不同形式的语句分为不同的节点类型,压缩模块将Javascript文件的代码进行压缩,处理模块根据不同的节点类型将Javascript文件的代码重新组合,
其中利用插入无用代码的方式随机生成一段代码插入到Javascript文件的原代码的任意位置中,进行代码重新组合;
和/或利用.操作符替换的方式将Javascript文件的代码重新组合,和/或利用函数参数去除的方式将Javascript文件的代码重新组合,实现Javascript混淆。
下面结合附图和具体实施例对本发明作进一步说明,以使本领域的技术人员可以更好地理解本发明并能予以实施,但所举实施例不作为对本发明的限定。
利用本发明方法进行基于AST的Javascript混淆时,具体过程为:
利用Esprima获取Javascript文件的抽象语法树,根据抽象语法树将Javascript文件分解成若干节点,不同形式的语句包括以下形式:EmptyStatement、ExpressionStatement、VariableDeclaration、FunctionDeclaration、WhileStatement、DoWhileStatement、IfStatement、SwitchStatement、BlockStatement、ReturnStatement、BreakStatement、ContinueStatement、ForStatement、ForInStatement及ForOfStatement,
不同形式的语句分为不同的节点类型,通过去除不必要的空格和换行回车,将Javascript文件的代码进行压缩,同时对于忘记以分号结尾的语句,可以在这个过程添加,代码压缩实际上还包括了简单的排错功能,相比原本换行和缩进的排版方式,压缩后的代码在视觉上降低了代码的可读性,
根据不同的节点类型将Javascript文件的代码重新组合,
其中利用插入无用代码的方式随机生成一段代码插入到Javascript文件的原代码的任意位置中,进行代码重新组合,造成阅读障碍,比如可以生成一段if条件语句,条件语句的判定条件为随机生成的十六进制整数、一元操作符与“!”相结合的语句,条件语句代码块部分为随机生成的变量声明,这些变量的作用域只在该条件语句内,不会对外部代码造成影响,同时条件语句不会占用过多内存资源,不影响原代码运行效率,
和/或利用“.”操作符替换的方式将Javascript文件的代码重新组合,调用对象属性或方法的方式有两种,a.b[0]和a[‘b’][0],相比较下,后者更不利于阅读,在抽象语法树中识别MemberExpression类型的节点,判断其computed属性是否为false,以此找到a.b[0]表达式,再根据其节点信息转变为a[‘b’][0]形式;
和/或利用函数参数去除的方式将Javascript文件的代码重新组合,将函数声明中需要传参的函数的参数删除,转为在函数体中声明同名变量,并初始化为传参实际值,可以依赖Javascript函数arguments属性,通过下角标从arguments中依次获取函数调用时传入的参数,函数声明时的参数列表通过节点的params属性获取,将其拷贝至临时变量中,在后续构建函数体时作为变量名声明,这种方式未改变函数语义,而是使其复杂化,不利于阅读,也无法通过代码重排简化,具有一定的欺骗性,
实现Javascript混淆。
在实际操作中,首先将待处理文件作为输入,Esprima会将输入文件的每个语句解析成各类AST节点,
接下来判断当前节点是否是系统中已知节点,节点是否已知可以通过上述混淆过程确定,若不是已知节点,则按照源文件的内容输出;若是已知节点,再次判断其是否为子节点,例如:if(a>0){b=1;},if条件语句是父节点,判定条件a>0和大括号中的语句b=1是子节点,区分父子节点的意义是,输出目标文件时所有节点都会被处理,子结点的内容会被重复输出在文件起始部分,导致输出文件与源文件出现非常大的差异,也可能导致文件出错,因此子节点等待系统接下来的递归处理,非子节点被添加进节点序列等待进一步处理,根据判断节点序列中的节点是否被处理过,循环处理节点序列中的节点,每个节点都经过节点分析用来判断节点类型、选定处理方案,经过节点处理用来进行js混淆操作,当节点序列中的所有节点都被处理后,将输出内容打印到文件中,最后输出目标文件。
混淆效果样例如下:
输出代码:
if(0x33<<0x28+0x58*0x111){var ZaleCTQUUQ=0x145*0x107-0x199%0x282;var gj=0x173%0x253|0x286*0x293;var ONOsy=0x66*0x298-0x154+0x69;}var func=function(){let a=arguments[0];let b=arguments[1];(console)['log'](a);(console)['log'](b);};if(0x55*0x183|0x190&0x159){var SohXmxtVVS=0x174-0x260<<0x163+0x298>>0x35;var issi=0x22*0x267|0x39>>0x117&0x227;var eoZzzBQZNX=0x158|0x230*0x219|0x99<<0x280;var fBlFfXciAS=0x270>>0x233*0x238+0x300>>0x250;}
如上述代码所示,输出代码在输入代码前后添加了两条无效的、不会占用过多内存空间的if条件语句,并且删除了函数的参数,转为在函数体中用let a=arguments[0];let b=arguments[1]的同名变量定义。原本console.log()函数调用,被转义为console[‘log’]()。处理后的文件在很大程度上降低了可读性,并保持了源文件的语义不改变。
利用本发明工具进行进行基于AST的Javascript混淆时,具体过程为:
分解模块利用Esprima获取Javascript文件的抽象语法树,根据抽象语法树将Javascript文件分解成若干节点,不同形式的语句包括以下形式:EmptyStatement、ExpressionStatement、VariableDeclaration、FunctionDeclaration、WhileStatement、DoWhileStatement、IfStatement、SwitchStatement、BlockStatement、ReturnStatement、BreakStatement、ContinueStatement、ForStatement、ForInStatement及ForOfStatement,
不同形式的语句分为不同的节点类型,压缩模块通过去除不必要的空格和换行回车,将Javascript文件的代码进行压缩,同时对于忘记以分号结尾的语句,可以在这个过程添加,代码压缩实际上还包括了简单的排错功能,相比原本换行和缩进的排版方式,压缩后的代码在视觉上降低了代码的可读性,
处理模块根据不同的节点类型将Javascript文件的代码重新组合,
其中利用插入无用代码的方式随机生成一段代码插入到Javascript文件的原代码的任意位置中,进行代码重新组合,造成阅读障碍,比如可以生成一段if条件语句,条件语句的判定条件为随机生成的十六进制整数、一元操作符与“!”相结合的语句,条件语句代码块部分为随机生成的变量声明,这些变量的作用域只在该条件语句内,不会对外部代码造成影响,同时条件语句不会占用过多内存资源,不影响原代码运行效率,
和/或利用“.”操作符替换的方式将Javascript文件的代码重新组合,调用对象属性或方法的方式有两种,a.b[0]和a[‘b’][0],相比较下,后者更不利于阅读,在抽象语法树中识别MemberExpression类型的节点,判断其computed属性是否为false,以此找到a.b[0]表达式,再根据其节点信息转变为a[‘b’][0]形式;
和/或利用函数参数去除的方式将Javascript文件的代码重新组合,将函数声明中需要传参的函数的参数删除,转为在函数体中声明同名变量,并初始化为传参实际值,可以依赖Javascript函数arguments属性,通过下角标从arguments中依次获取函数调用时传入的参数,函数声明时的参数列表通过节点的params属性获取,将其拷贝至临时变量中,在后续构建函数体时作为变量名声明,这种方式未改变函数语义,而是使其复杂化,不利于阅读,也无法通过代码重排简化,具有一定的欺骗性,
实现Javascript混淆。
在实际操作中,首先分解模块将待处理文件作为输入,Esprima会将输入文件的每个语句解析成各类AST节点,
接下来判断当前节点是否是系统中已知节点,节点是否已知可以通过上述混淆过程确定,若不是已知节点,则按照源文件的内容输出;若是已知节点,再次判断其是否为子节点,例如:if(a>0){b=1;},if条件语句是父节点,判定条件a>0和大括号中的语句b=1是子节点,区分父子节点的意义是,输出目标文件时所有节点都会被处理,子结点的内容会被重复输出在文件起始部分,导致输出文件与源文件出现非常大的差异,也可能导致文件出错,因此子节点等待系统接下来的递归处理,非子节点被添加进节点序列等待进一步处理,根据判断节点序列中的节点是否被处理过,循环处理节点序列中的节点,每个节点都经过节点分析用来判断节点类型、选定处理方案,经过节点处理用来进行js混淆操作,当节点序列中的所有节点都被处理后,将输出内容打印到文件中,最后输出目标文件。
混淆效果样例如下:
输出代码:
if(0x33<<0x28+0x58*0x111){var ZaleCTQUUQ=0x145*0x107-0x199%0x282;var gj=0x173%0x253|0x286*0x293;var ONOsy=0x66*0x298-0x154+0x69;}var func=function(){let a=arguments[0];let b=arguments[1];(console)['log'](a);(console)['log'](b);};if(0x55*0x183|0x190&0x159){var SohXmxtVVS=0x174-0x260<<0x163+0x298>>0x35;var issi=0x22*0x267|0x39>>0x117&0x227;var eoZzzBQZNX=0x158|0x230*0x219|0x99<<0x280;var fBlFfXciAS=0x270>>0x233*0x238+0x300>>0x250;}
输出代码在输入代码前后处理模块添加了两条无效的、不会占用过多内存空间的if条件语句,并且删除了函数的参数,转为在函数体中用let a=arguments[0];let b=arguments[1]的同名变量定义。原本console.log()函数调用,被转义为console[‘log’]()。处理后的文件在很大程度上降低了可读性,并保持了源文件的语义不改变。
以上所述实施例仅是为充分说明本发明而所举的较佳的实施例,本发明的保护范围不限于此。本技术领域的技术人员在本发明基础上所作的等同替代或变换,均在本发明的保护范围之内。本发明的保护范围以权利要求书为准。
Claims (9)
1.一种基于AST的Javascript混淆方法,其特征是根据抽象语法树将Javascript文件分解成若干节点,不同形式的语句分为不同的节点类型,将Javascript文件的代码进行压缩,并根据不同的节点类型将Javascript文件的代码重新组合,
其中利用插入无用代码的方式随机生成一段代码插入到Javascript文件的原代码的任意位置中,进行代码重新组合;
和/或利用.操作符替换的方式将Javascript文件的代码重新组合,
和/或利用函数参数去除的方式将Javascript文件的代码重新组合,
实现Javascript混淆。
2.根据权利要求1所述的方法,其特征是Javascript文件的语句包括以下形式:EmptyStatement、ExpressionStatement、VariableDeclaration、FunctionDeclaration、WhileStatement、DoWhileStatement、IfStatement、SwitchStatement、BlockStatement、ReturnStatement、BreakStatement、ContinueStatement、ForStatement、ForInStatement及ForOfStatement。
3.根据权利要求1或2所述的方法,其特征是函数参数去除的方式是:将函数声明中需要传参的函数的参数删除,而在函数体中声明同名变量,并初始化为传参实际值。
4.根据权利要求3所述的方法,其特征是通过去除不必要的空格和换行回车,将Javascript文件的代码进行压缩。
5.根据权利要求1或4所述的方法,其特征是Javascript文件分解成若干节点,判断当前节点是否为已知节点,若不是已知节点,则按照Javascript文件的源文件的内容输出;若是已知节点,则判断所述的已知节点是子节点还是父节点,根据已知节点的类型进行代码重新组合的处理。
6.一种基于AST的Javascript混淆工具,其特征是包括分解模块、压缩模块及处理模块,
分解模块根据抽象语法树将Javascript文件分解成若干节点,不同形式的语句分为不同的节点类型,压缩模块将Javascript文件的代码进行压缩,处理模块根据不同的节点类型将Javascript文件的代码重新组合,
其中利用插入无用代码的方式随机生成一段代码插入到Javascript文件的原代码的任意位置中,进行代码重新组合;
和/或利用.操作符替换的方式将Javascript文件的代码重新组合,
和/或利用函数参数去除的方式将Javascript文件的代码重新组合,
实现Javascript混淆。
7.根据权利要求6所述的工具,其特征是处理模块中函数参数去除的方式是:将函数声明中需要传参的函数的参数删除,而在函数体中声明同名变量,并初始化为传参实际值。
8.根据权利要求6或7所述的工具,其特征是压缩模块通过去除不必要的空格和换行回车,将Javascript文件的代码进行压缩。
9.根据权利要求8所述的工具,其特征是分解模块将Javascript文件分解成若干节点,判断当前节点是否为已知节点,若不是已知节点,则按照Javascript文件的源文件的内容输出;若是已知节点,则判断所述的已知节点是子节点还是父节点,根据已知节点的类型进行代码重新组合的处理。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911069021.8A CN110826032A (zh) | 2019-11-05 | 2019-11-05 | 一种基于AST的Javascript混淆方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911069021.8A CN110826032A (zh) | 2019-11-05 | 2019-11-05 | 一种基于AST的Javascript混淆方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110826032A true CN110826032A (zh) | 2020-02-21 |
Family
ID=69552466
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911069021.8A Withdrawn CN110826032A (zh) | 2019-11-05 | 2019-11-05 | 一种基于AST的Javascript混淆方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110826032A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113158147A (zh) * | 2021-03-24 | 2021-07-23 | 中国人民解放军战略支援部队信息工程大学 | 一种基于母体融合的代码混淆方法 |
CN113590624A (zh) * | 2021-07-29 | 2021-11-02 | 北京天融信网络安全技术有限公司 | 一种数据处理方法及电子装置 |
CN113946804A (zh) * | 2021-12-21 | 2022-01-18 | 深圳市活力天汇科技股份有限公司 | 一种源代码的混淆方法和装置 |
-
2019
- 2019-11-05 CN CN201911069021.8A patent/CN110826032A/zh not_active Withdrawn
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113158147A (zh) * | 2021-03-24 | 2021-07-23 | 中国人民解放军战略支援部队信息工程大学 | 一种基于母体融合的代码混淆方法 |
CN113158147B (zh) * | 2021-03-24 | 2022-12-09 | 中国人民解放军战略支援部队信息工程大学 | 一种基于母体融合的代码混淆方法 |
CN113590624A (zh) * | 2021-07-29 | 2021-11-02 | 北京天融信网络安全技术有限公司 | 一种数据处理方法及电子装置 |
CN113946804A (zh) * | 2021-12-21 | 2022-01-18 | 深圳市活力天汇科技股份有限公司 | 一种源代码的混淆方法和装置 |
CN113946804B (zh) * | 2021-12-21 | 2022-05-20 | 深圳市活力天汇科技股份有限公司 | 一种源代码的混淆方法和装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Jansson et al. | PolyP—a polytypic programming language extension | |
US6516461B1 (en) | Source code translating method, recording medium containing source code translator program, and source code translator device | |
Ford | Parsing expression grammars: a recognition-based syntactic foundation | |
CN110826032A (zh) | 一种基于AST的Javascript混淆方法 | |
KR100614677B1 (ko) | 구조화된 문서를 압축/복원하기 위한 방법 | |
US20170124166A1 (en) | Dynamic Field Data Translation to Support High Performance Stream Data Processing | |
US8156471B2 (en) | Multi-language execution method | |
US20040172234A1 (en) | Hardware accelerator personality compiler | |
Fedorchenko et al. | Equivalent transformations and regularization in context-free grammars | |
Reis et al. | An on-the-fly grammar modification mechanism for composing and defining extensible languages | |
CN113703779A (zh) | 一种跨平台的多语言编译方法和超轻量物联网虚拟机 | |
US20100023924A1 (en) | Non-constant data encoding for table-driven systems | |
JP2879099B1 (ja) | 抽象構文木処理方法、抽象構文木処理プログラムを記録したコンピュータ読み取り可能な記録媒体、抽象構文木データを記録したコンピュータ読み取り可能な記録媒体、及び、抽象構文木処理装置 | |
Kameyama et al. | Typed dynamic control operators for delimited continuations | |
Cordy et al. | The TXL programming language syntax and informal semantics version 7 | |
Xi | Applied type system: An approach to practical programming with theorem-proving | |
Antoy et al. | Specification-based code generation | |
Ramsey | Unparsing expressions with prefix and postfix operators | |
Nightingale | Savile Row Manual | |
Kurš et al. | Efficient parsing with parser combinators | |
Kramer et al. | Reflection in attribute grammars | |
Slesarenko et al. | First-class isomorphic specialization by staged evaluation | |
CN112270176A (zh) | 深度学习框架中模式转换的方法、装置和计算机存储介质 | |
Milton et al. | LL (k) parsing for attributed grammars | |
Bangare et al. | Code parser for object Oriented software Modularization |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WW01 | Invention patent application withdrawn after publication |
Application publication date: 20200221 |
|
WW01 | Invention patent application withdrawn after publication |