语法解析工具Lex、CUP、SableCC、JFlex介绍

以下为你介绍的语法解析工具都可用在Linux系统上:Lex(词法分析器生成工具)、CUP(语法/词法分析生成器)、SableCC(编译器生成工具)、JFlex(语法分析生成器)。

1、Lex(词法分析器生成工具)

语法解析工具Lex、CUP、SableCC、JFlex介绍

这是一个经典的生成词法分析器的工具。

Lex帮助编写程序,其控制流由输入流中的正则表达式实例控制。它非常适用于编辑器脚本类型的转换,并适合于分割输入以准备解析例程。

Lex源是一个正则表达式和相应程序片段的表。该表被转换为程序,该程序读取输入流,将其复制到输出流,然后将输入划分为与给定表达式匹配的字符串。识别出每个这样的字符串后,就会执行相应的程序片段。表达式的识别是由Lex生成的确定性有限自动机执行的。由用户编写的程序片段按照在输入流中出现相应正则表达式的顺序执行。

下载地址:http://dinosaur.compilertools.net/

2、CUP(语法/词法分析生成器)

一个LALR(Construction of Useful Parsers)语法/词法分析生成器。

我如何编程CUP?

CUP根据您在一个特殊文件中提供的规范来生成解析器,该规范的语法与YACC非常相似:

/* Simple +/-/* expression language; parser evaluates constant expressions on the fly*/

import java_cup.runtime.*;

parser code {:

// Connect this parser to a scanner!

scanner s;

Parser(scanner s){ this.s=s; }

:}

/* define how to connect to the scanner! */

init with {: s.init(); :};

scan with {: return s.next_token(); :};

/* Terminals (tokens returned by the scanner). */

terminal            SEMI, PLUS, MINUS, TIMES, UMINUS, LPAREN, RPAREN;

terminal Integer    NUMBER;        // our scanner provides numbers as integers

/* Non terminals */

non terminal            expr_list;

non terminal Integer    expr;      // used to store evaluated subexpressions

/* Precedences */

precedence left PLUS, MINUS;

precedence left TIMES;

precedence left UMINUS;

/* The grammar rules */

expr_list ::= expr_list expr:e SEMI         {: System.out.println(e);:}

| expr:e SEMI                   {: System.out.println(e);:}

;

expr      ::= expr:e1 PLUS  expr:e2         {: RESULT = e1+e2;       :}

| expr:e1 MINUS expr:e2        {: RESULT = e1-e2;       :}

| expr:e1 TIMES expr:e2        {: RESULT = e1*e2;       :}

| MINUS expr:e                 {: RESULT = -e;          :}

%prec UMINUS

| LPAREN expr:e RPAREN         {: RESULT = e;           :}

| NUMBER:n                     {: RESULT = n;           :}

;

这将产生两个文件parser.java和sym.java,可以将其包含在任意Java项目中。

3、SableCC(编译器生成工具)

SableCC是一个解析器生成器,生成用于构建编译器,解释器和其他文本解析器的面向对象的框架。SableCC保持机器代码与用户代码之间的清晰区分,从而缩短了开发周期。

这个框架是基于两个基本的设计决策:首先是利用面向对象技术自动构建精确的典型的抽象语法树。第二,这个框架使用经过扩展的Visitor访问者模式来生成tree-walker类。

下载地址:https://sourceforge.net/projects/sablecc/

4、JFlex(语法分析生成器)

语法解析工具Lex、CUP、SableCC、JFlex介绍

JFlex是用Java编写的Java的词法分析器生成器(也称为扫描器生成器)。

词法分析器生成器将带有一组正则表达式和相应动作的规范作为输入。它生成一个程序(词法分析器),该程序读取输入,将输入与spec文件中的正则表达式进行匹配,如果正则表达式匹配,则运行相应的操作。词法分析器通常是编译器中的第一步,它匹配关键字、注释、运算符等,并为解析器生成输入令牌流。词法分析器还可用于许多其他目的。

JFlex词法分析器基于确定性有限自动机(DFA),它们速度很快。

JFlex旨在与Scott Hudson的LALR解析器生成器CUP以及Bob Jamison的Berkeley Yacc BYacc/J的Java修改一起使用。它也可以与其他解析器生成器(如ANTLR)一起使用,或作为独立工具使用。

下载地址:https://www.jflex.de/

注明

以上就是语法解析工具Lex、CUP、SableCC、JFlex的介绍内容,这些语法解析工具都能使用在Linux操作系统中。

栏目相关文章