regex - 将正则表达式转换为CFG

标签 regex grammar automata

如何将某种常规语言转换为其等效的上下文无关语法?
是否有必要构造与该正则表达式相对应的DFA,或者是否存在用于此类转换的规则?

例如,考虑以下正则表达式

01+10(11)*



如何描述上述RE对应的语法?

最佳答案

  • 将A + B更改为语法
    G -> A
    G -> B
    
  • 将A *更改为
    G -> (empty)
    G -> A G
    
  • 将AB更改为
    G -> AB
    

  • 并以递归方式继续处理A和B。基本情况是空的语言(无结果)和单个符号。

    在你的情况下
     A -> 01
     A -> 10B
     B -> (empty)
     B -> 11B
    

    如果语言是通过有限自动机描述的:
  • 使用状态作为非终结符
  • 使用语言作为终端符号集
  • 在原始自动机中的字母a上为任何过渡p-> q添加过渡p-> aq
  • 在语法
  • 中使用初始状态作为初始符号

    关于regex - 将正则表达式转换为CFG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2639468/

    相关文章:

    regex - 仅当匹配 X 时,才使用 sed 从字符串中删除前 N 个和最后 N 个字符

    regex - 如何只获取 YYYY/MM/DD 格式的 git 日期?

    parsing - 字符串常量导致 xtext 中出现意外的类型冲突

    theory - 上标加号含义

    algorithm - 图灵机和算法有什么区别?

    python - 如何将正则表达式函数应用于数据框列以返回值

    python - 从字符串中删除非字母数字但保留编码的非 ASCII 字符 åäö

    html - HTML 是上下文无关语言吗?

    c - 哪一个是错误的?

    c - 词法分析器: how to identify the end of a token