语法解析工具dropincc.java、AustenX、JavaCUP、pyC11介绍

以下为你介绍的语法解析工具都可用在Linux系统上:dropincc.java(DSL语法解析器生成器)、AustenX(Java 的解析器代码生成器)、JavaCUP(CUP 解析器生成器)、pyC11(Python 语法解析程序)。

1、dropincc.java(DSL语法解析器生成器)

dropincc.java 是一个简单、好用的语法解析器生成器。专为java语言环境下,实施DSL方案而设计。

特点:使用纯java语法(Fluent Interface)制定用户的词法、语法规则;jdk1.6 compiler API动态编译为字节码;自动管理字节码、用户无需关心具体生成的解析器源码;专为DSL打造,相对与使用其它常见工具(javacc, antlr等)做DSL解析,代码量急剧下降;上手较为容易,让用户更加关注自身业务内容,

需要jdk1.6或以上版本运行,无任何其它依赖。

识别LL(*)语法。

2、AustenX(Java 的解析器代码生成器)

语法解析工具dropincc.java、AustenX、JavaCUP、pyC11介绍

AustenX(有时简称为“Austen”)是一个 Java 的解析器代码生成器,是使用解析表达式文法(PEG)和Packrat解析派生算法的解析器生成器。与其他PEG解析器不同,目前使用初始标记化步骤将输入转换为标记,然后由语法解析器处理。此标记化可以作为Austen程序包的一部分完成,并允许特定标记成为一个以上标记类的成员。

从本质上讲,AustenX是一种用于生成程序代码的工具,该程序代码可根据描述要读取文本的语法和语法的专用语言来解析文本文件。当前,可以生成关于Java的代码。

特征:

AustenX具有许多重要功能,这些可以总结如下:

令牌化,可以提高内存效率。

排除特定PEG规则的记忆功能,甚至完全避免完全记忆的能力。

对具有直接和间接左递归的规则的强大功能支持,无论有无记忆都可以使用。

一个更好的实现左递归的实现,它可以理解选项的顺序,并允许轻松地创建和指定具有优先级的复杂解析树。

规范语言未链接到任何特定的目标语言(尽管当前仅支持Java作为目标语言)。

PEG框架的扩展允许进行一些语义解析,并可能解析更大的输入类别。

下载地址:https://scratchy.org.nz/austen.php

3、JavaCUP(CUP 解析器生成器)

语法解析工具dropincc.java、AustenX、JavaCUP、pyC11介绍

JavaCUP 是 Java 语言实现的 CUP 解析器生成器。它由C.Scott Ananian,Frank Flannery,Dan Wang,Andrew W.Appel和Michael Petter开发。它实现了标准的LALR(1)解析器生成。作为分析器作者,您可以指定语法符号(terminal T1,T2; non terminal N1, N2;)以及产生式(LHS :== RHS1 | RHS2 ;)。如果为每个生产替代方案提供动作代码({: RESULT = myfunction(); :}),则解析器将在对特定生产执行归约后将调用此动作代码。您可以使用这些回调来组装AST(抽象语法树)或用于任意目的。您还应该看看扫描仪生成器JFlex,它特别适合与CUP协作。

示例代码:

// Simple Example Scanner Class 

// scanner.java

import java_cup.runtime.*;

import java.io.*;

//import sym;

public class scanner implements java_cup.runtime.Scanner {

/* single lookahead character */

protected static int next_char;

// since cup v11 we use SymbolFactories rather than Symbols

private SymbolFactory sf = new DefaultSymbolFactory();

private static FileReader fileReader;

public scanner(FileReader fr){

this.fileReader=fr;

}

/* advance input by one character */

protected static void  advance()

throws java.io.IOException

{ next_char = fileReader.read(); }

/* initialize the scanner */

public static void init()

throws java.io.IOException

{ advance(); }

/* recognize and return the next complete token */

public Symbol next_token()

throws java.io.IOException

{

for (;;)

switch (next_char)

{

case '0': case '1': case '2': case '3': case '4': 

case '5': case '6': case '7': case '8': case '9': 

/* parse a decimal integer */

int i_val = 0;

do {

i_val = i_val * 10 + (next_char - '0');

advance();

} while (next_char >= '0' && next_char <= '9');

return sf.newSymbol("NUMBER",sym.NUMBER, new Integer(i_val));

case ';': advance(); return sf.newSymbol("SEMI",sym.SEMI);

case '+': advance(); return sf.newSymbol("PLUS",sym.PLUS);

case '-': advance(); return sf.newSymbol("MINUS",sym.MINUS);

case '*': advance(); return sf.newSymbol("TIMES",sym.TIMES);

case '/': advance(); return sf.newSymbol("DIVIDE",sym.DIVIDE);

case '%': advance(); return sf.newSymbol("MOD",sym.MOD);

case '(': advance(); return sf.newSymbol("LPAREN",sym.LPAREN);

case ')': advance(); return sf.newSymbol("RPAREN",sym.RPAREN);

case -1: return sf.newSymbol("EOF",sym.EOF);

default: 

/* in this simple scanner we just ignore everything else */

advance();

break;

}

}

};

下载地址:http://www2.cs.tum.edu/projects/cup/

4、pyC11(Python 语法解析程序)

pyC11 是一个 Python 些的用来解析 C 程序语法的解析程序,遵循 ISO/IEC 9899:2011 标准,使用 pyPEG 编写,支持 Python 2.7 和 3.x。

下载地址:https://bitbucket.org/fdik/pyc11

注明

以上就是语法解析工具dropincc.java、AustenX、JavaCUP、pyC11的介绍内容,这些语法解析工具都能使用在Linux操作系统中。

栏目相关文章