Skip to content

MeRcy-PM/L_regexp

Repository files navigation

L_regexp

Learning for lexical analysis.

Chinese: 程序简介: 龙书第三章,词法分析。 根据自动状态机进行字符串匹配。

  1. 表达式的词法分析: 表达式词法分析对每个输入的字符进行解析,主要处理特殊字符,转义字符,以及特殊字符和特殊字符出现的 关系。

  2. 语法树: 早期版本: 之前版本使用双栈解析语法树,由于栈的特殊操作,因此实现一个抽象模版栈基类,派生出只具有进栈出栈的 符号栈和需要根据优先级决定是否需要合并的操作符栈,同时使用运算符重载实现优先级的比较。

当前版本: 语法树使用LR(0)项集状态机进行自底向上构建: 不进行展开或者规约的时候,自左向右逐渐合并语法树。 expr' -> expr $ expr -> expr '|' expr expr -> '(' expr ')' expr -> expr '*' expr -> expr expr expr -> id 错误: 当匹配一个expr表达式时,第一个看到‘)’或者‘*’表达式不支持。 展开: 当匹配到一个‘(’时,需要递归展开一个表达式。 当匹配到’|‘时,合并完左边表达式后展开右边的表达式。 规约: 当匹配到‘)‘时,将表达式规约至匹配的’(‘。 当匹配到结束符$时,完全规约。

  1. 使用龙书3.9节的first_op、last_op和nullable计算follow_op: 使用后序遍历,推算出实体节点的属性,再根据该属性对连接符的属性进行计算。 使用先序遍历,从根节点开始计算,再计算各个子节点。

  2. 字符串匹配: 使用follow_op计算出来的结果构造出一张状态转换图,用vector实现位图来保存边的信息。 通过深度搜索对字符串进行匹配。

  3. 构建: 在Linux下使用autoconf工具自动构建configure和Makefile。

About

Learning for lexical analysis.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published