/AQL-Subset

AQL语法子集实现, 编译原理期末project

Primary LanguageC++

AQL Subset

中山大学软件学院2013级编译原理Project

AQL,全称Annotation Query Language,用于文本分析,可从非结构化或半结构化的文本中提取结构化信息的语言,语法和SQL类似。 该程序实现了AQL语法的子集,主要支持操作为:

create view

--extract regex

--extract pattern

--select

output view

编译、运行环境:

由于需要用到dirent.h头文件,故只能在Unix环境下编译和使用。

使用方法:

进入src文件夹,执行命令:

$ make
$ ./AQL <path to .aql> <path to file or the dir include the files>
$ ...
$ make clean

dataset文件夹中已经有若干可供使用的样例,每个AQL文件对应一个同名的文件夹,内为适用于该AQL文件的若干文章,以.input或着.txt为后缀名。 另外该程序只能用于分析英文文章,{NUM1, NUM2}子句中要求NUM1 >= NUM2 > 0

以下以使用Perloc.aql为例:

$ cd src
$ make
$ ./AQL ../dataset/Perloc.aql ../dataset/perloc
$ make clean

需要输出到文件可自行使用重定向。

TODO:

  • 基本功能
    • lexer 词法分析
    • tokenizer 文章分析与提取
    • parser 语法分析
    • operator 根据语法分析产生的结果生成view
    • output 格式化输出
  • 支持不完整Token
    • 更改tokenizer数据结构
    • 更新对文章分析部分的实现
  • Token匹配算法优化
    • 更改遍历为前后token的ID对比
    • 支持出现在首部的Token
    • 支持出现在尾部的Token
    • 支持连续的Token
    • 支持单独一个Token
  • AQL编写及数据集收集
  • 支持中文
    • 更新AQL文件写法
    • 改造正则表达式引擎
    • 更新词法、语法分析和匹配规则

v1.1

  • 重新实现了Token规则的匹配,提升了匹配的速度。
  • 支持不完整Token的匹配。
  • 能够提示一些基本的语义错误,比如from子句中出现了未曾创建的viewName。
  • 我们认为连续的Token或者单独的Token规则是不可理喻的,故不予实现。

v1.0

  • 实现了基本的AQL功能
  • 能够提示词法,语法错误,及其出现的行列号。
  • 对于regex匹配,只能匹配完整的Token,对于匹配到不完整Token的正则表达式,比如[0-9]匹配到数的一部分,则会报错。
  • 对于Token规则的匹配使用遍历实现,有极大的改进空间 ;)。