直接从正则表达式DFA直接从正则表达式DFA详解NULLABLE、FIRSTPOS、LASTPOS和FOLLOWPOS的计算规则引入正在上编译原理的课程,为了对抗遗忘,写下这篇文章加强自己的记忆,同时也希望能给大家带来帮助。在编译原理中,要把正则表达式转化为DFA,其中有一步就是要计算语法分析树上各结点的nullable、firstpos、lastpos和followpos。如果不理解其中的原
准备知识语法制导:解析(parse)输入的字符串时,在特定位置执行指定的动作。语法制导算法:其实就本文内容,解析字符串是什么状态(像>=通常弄个状态图,如果是关键字弄个表暂存比较适合)来说,这个算法相当于对字符串每一个字符进行下一个状态判断,就是 switch(string.charAt(i))这样逐个处理。NFA状态数 = 正则表达式的 (符号 + 操作符数) * 2:举例,比如说正则里面
转载 2024-07-02 23:21:09
257阅读
在前一文章中总结了一下对DFA和NFA两种有限状态自动机的认识,在实际应用中,例如开发编译器时,将正则表达式转换为自动机会非常重要的一环。如果对NFA和DFA不理解的可以看下这篇博文 看一下如何把正则表达式通过Thompson构造转换为NFA: DFA和NFA理解 一个例子: (and|any)转换为NFA“|”或者,也就是从开始分成两条路去选择。 或者:从初始状态分化两条对应字符为空字符
转载 2023-12-21 13:29:19
490阅读
这学期在学编译原理,上周刚学完词法分析,作业是手动构造DFA并完成词法分析。然而优秀的人当然要以高标准要求自己,于是花了两天实现了输入正则表达式构造NFANFA转DFA的算法。算法包括以下几个步骤:正则表达式->后缀表达式用后缀表达式构造NFANFA构造DFA最小化DFA(暂未完成)正则表达式->后缀表达式正则表达式的定义算法中实现的正则表达式仅包含运算符。为了方便实现,显式地增加
转载 2024-04-16 21:20:56
63阅读
这个版本修改了前面版本的两个个bug。第一个:识别到字符集的时候,只是将name_number加1,却并不对reg_pattern_table[name_number]进行初始化。第二个:识别到假名的时候,并不为他分配一个name_number,而只是在hash表中为其分配一个表项。现在,当识别到这两个的时候,都会为之分配一个name_number,并在reg_pattern_table中正确的初
正则表达式1.2(创建NFA) 承接上一篇日志, 这一次实现的是创建NFA.输入是正则表达式对应的解析树(一个二叉树).输出是对应的NFA(一个有向图).思路也是递归实现, 对于一个树节点, 用两个子节点创建对应的NFA, 然后再根据树节点的类型将两个子NFA拼接起来.使用到的数据结构: struct State { int code; //状态码, 一般是自
从网上搜了一篇正则表达式转换NFA的代码实现,链接:https://blog.51cto.com/siwanghu/1705664 使用了 (ab|c) * abb这个正则表达式验证了一下,使用McMaughton-Yamada-Thompson算法进行转换,结果如下 但代码跑出来结果如下: 将其转换为状态转换图:发现代码的结果无法表示 正则表达式 – abb ,也就是说代码对于闭包*这处理有问题
我用java实现了一个正则表达式NFA的转换程序,以下是我的代码package com.siwanghu.regextoNFA; public class Node {     private int id;     private static
原创 2015-10-23 21:31:46
2407阅读
1点赞
文章目录前置知识有限状态机状态机下的正则表达式串联匹配并连匹配 (正则表达式中的 **|**)
原创 2022-09-02 23:25:36
659阅读
常用正则表达式,正则表达式
原创 2023-04-28 01:15:46
1568阅读
正则表达式基础正则表达式正则表达式就是能用某种模式去匹配一类字符串的公式,它是由一串字符和元字符构成 的字符串。所谓元字符,就是用以阐述字符表达式的内容、转换和描述各种操作信息的字符。正则表示式就是处理字符串的方法,它是以行为单位来进行字符串的处理行为, 正则表示式 通过一些特殊符号的辅助,可以让使用者轻易的达到搜寻/删除/取代某特定字符串的处理程 序。vim、grep、find、awk、sed等
原创 2024-03-07 23:33:10
342阅读
                         正则表达式、扩展正则表达式及其应用 1.什么是正则表达式正则表达式(REGEXP:REGular EXPression),就是一种处理字符的方法,它以行为单位进行字符串处理的。其实就是透过一些特
原创 2013-03-07 00:45:50
5019阅读
​​*​​​匹配0或多个正好在它之前的那个字符。例如正则表达式。*意味着能够匹配任意数量的任何字符。​​?​​​匹配0或1个正好在它之前的那个字符。注意:这个元字符不是所有的软件都支持的。​​.*​​​是指任何字符0个或多个,​​.?​​是指任何字符0个或1个。
             前一章讲到了正则表达式的一些普通字符和特殊字符,这篇文章主要学习元字符。   元字符            在正则表达 式中"元字符"是一类较为
转载 2023-10-07 13:27:02
115阅读
正则表达式 - 元字符简述元字符表例子 简述正则表达式语言由两种基本字符类型组成:原义(正常)文本字符和元字符。元字符使正则表达式具有处理能力。所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式。元字符表下表包含了元字符的完整列表以及它们在正则表达式上下文中的行为:字符描述\将下一个字符标记为一个特殊字符、或一个原义字
在线图形化展示工具基础实例import java.util.regex.*; class RegexExample1{ public static void main(String args[]){ String content = "I am noob " + "from runoob.com."; String pattern = ".*r
Java 正则表达式详解_正则表达式如果你不熟悉这个术语,那么“正则表达式”(Regular Expression)就是一个字符构成的串,它定义了一个用来搜索匹配字符串的模式。 正则表达式30分钟入门教程 常用正则表达式 许多语言,包括Perl、PHP、Python、JavaScript和JScript,都支持用正则表达式处理文本,
原创 2023-01-13 17:07:22
2973阅读
正则表达式:常用正则表达式大全 一、20个最常用的正则表达式 二、校验数字表达式 三、校验字符的表达式 四、特殊需求表达式 五、正则表达式在线测试工具 regex101是一个非常不错的正则表达式在线测试工具。
转载 2018-04-02 14:00:00
2048阅读
2评论
正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。例如:runoo+b,可以匹配 runoob、runooob、runoooooob 等,+ 号代表前面的字符必须至少出现一次(1次或多次)。 runoo*b,可以匹配 runob、runoob、runoooooo
正则表达式——古老而又强大的文本处理工具。仅用一段简短的表达式语句,就能快速地实现一个复杂的业务逻辑。掌握正则表达式,让你的开发效率有一个质的飞跃。 正则表达式经常被用于字段或任意字符串的校验,比如下面这段校验基本日期格式的JavaScript代码: var reg = /^(\\d{1,4})(-|\\/)(\\d{1,2})\\2(\\d{1,2})$/;   
原创 2023-05-17 16:24:00
456阅读
  • 1
  • 2
  • 3
  • 4
  • 5