语法解析工具ruby2ruby、chrysanthemum、Jison、JavaCC Maven Plugin介绍

以下为你介绍的语法解析工具都可用在Linux系统上:ruby2ruby(生成纯 Ruby 代码)、chrysanthemum(词法/语法分析框架)、Jison(JavaScript解析器)、JavaCC Maven Plugin(执行 JavaCC 语法)。

1、ruby2ruby(生成纯 Ruby 代码)

ruby2ruby 提供一些用来根据 RubyParser 兼容的 Sexps 轻松生成纯 Ruby 代码的方法。可在 Ruby 中轻松实现动态语言处理。

2、chrysanthemum(词法/语法分析框架)

chrysanthemum (中文名“菊花”)是一个由C++写成的小巧灵活、高度可伸缩、模块化、高性能的词法/语法分析框架。

chrysanthemum 是一个纯模板库,包含头文件即可使用,且无任何第三方依赖。

chrysanthemum 不同于YACC和ANLTR等词法/语法分析工具(根据文法文件生成解析器代码),它是一个纯模板库,利用C++的表达式模板,模板元编程等技术,使用一系列简介、小巧、灵活的核心类,自动推导并构建出任意复杂的文本解析对象,而且chrysanthemum 允许灵活的嵌入C++函数对象作为语义动作,因此具有很好的灵活性和伸缩性。

chrysanthemum 能够极大的简化语法分析器的编写工作,使用户可以在C++环境中“书写”BNF范式从而快速的构造出对应的词法/文法分析器。同时chrysanthemum尽最大努力保证分析器的性能,力求达到近似于纯手工代码的效率。

chrysanthemum 大量使用使用表达式模板技术、模板元编程、C++0X新标准和函数式编程思想。

chrysanthemum 完全以C++0X新标准写成,因此只能用于对C++0X支持比较好的编译器中,MSVC系列因没有提供可变模板参数的支持,无法使用。目前仅在GCC4.5和GCC4.6环境下测试通过,WINDOWS环境可以选择使用MINGW。

注意:编译时请加上 -std=c++0x 参数以打开C++0X支持。

chrysanthemum 很大程度上受到 Joel de Guzman 所编写的boost.spirit库的启发,但是力求更灵活,更高效,且更具收缩性。

3、Jison(JavaScript解析器)

语法解析工具ruby2ruby、chrysanthemum、Jison、JavaCC Maven Plugin介绍

JavaScript解析器,Coffee就是使用Jison解析的。Jison 将一个上下文无关语法作为输入,输出对应的JavaScript代码,类似Yacc。

Jison输出一个JavaScript文件,该文件能够解析该语法描述的语言。然后,您可以使用生成的脚本来解析输入,并根据输入接受,拒绝或执行操作。如果您熟悉Bison或Yacc或其他克隆,则可以开始使用了。

安装:

可以使用npm为节点安装Jison,使用npm:

npm install jison -g

从命令行使用:

克隆github存储库以获取示例:

git clone git://github.com/zaach/jison.git

cd jison/examples

现在,您可以生成一些解析器了:

jison calculator.jison

这将在您当前的工作目录中生成Calculator.js。该脚本可用于解析输入文件,如下所示:

echo "2^32 / 1024" > testcalc

node calculator.js testcalc

这将打印出4194304。

来自CommonJS模块的用法:

您也可以通过JavaScript以编程方式生成解析器。假设Jison在commonjs环境的加载路径中:

// mygenerator.js

var Parser = require("jison").Parser;

var grammar = {

"lex": {

"rules": [

["\\s+", "/* skip whitespace */"],

["[a-f0-9]+", "return 'HEX';"]

]

},

"bnf": {

"hex_strings" :[ "hex_strings HEX",

"HEX" ]

}

};

var parser = new Parser(grammar);

// generate source, ready to be written to disk

var parserSource = parser.generate();

// you can also use the parser directly from memory

parser.parse("adfe34bc e82a");

// returns true

parser.parse("adfe34bc zxg");

// throws lexical error

另外,如果您想使用Jison文件格式但不为其生成静态JavaScript文件,则可以使用如下代码段:

// myparser.js

var fs = require("fs");

var jison = require("jison");

var bnf = fs.readFileSync("grammar.jison", "utf8");

var parser = new jison.Parser(bnf);

module.exports = parser;

使用生成的解析器:

生成解析器并将其保存后,就不再需要Jison或任何其他依赖项。

如前所述,可以从命令行使用解析器:

node calculator.js testcalc

虽然,更理想的情况是,解析器将是另一个模块的依赖项。您可以从另一个模块中要求它,如下所示:

// mymodule.js

var parser = require("./calculator").parser;

function exec (input) {

return parser.parse(input);

}

var twenty = exec("4 * 5");

或:

// mymodule.js

function exec (input) {

return require("./calculator").parse(input);

}

var twenty = exec("4 * 5");

下载地址:http://zaa.ch/jison/

4、JavaCC Maven Plugin(执行 JavaCC 语法)

JavaCC Maven Plugin 是 Maven 用来执行 JavaCC 语法分析处理的插件。

注明

以上就是语法解析工具ruby2ruby、chrysanthemum、Jison、JavaCC Maven Plugin的介绍内容,这些语法解析工具都能使用在Linux操作系统中。

栏目相关文章