ChangeFm 2021-02-20 11:39 采纳率: 0%
浏览 14

上下文无法语法识别正则表达式的问题

ltr代表字母 lpar代表左括号 rpar代表右括号 star代表*  eps代表ε bar 代表|

题目是使用CFG去识别合法正则表达式输入: ab* 被识别成 lts lts star 能被CFG接受 *εa|b 被识别成 star eps ltr bar ltr,但是不被接受

我的CFG是:S-> ltr| S | lpar * S * rpar | ltr * star | S * eps * S | ε

  • 写回答

1条回答 默认 最新

  • lshen01 2023-03-16 14:17
    关注

    参考GPT和自己的思路:

    你的CFG看起来能够识别一个正则表达式的基本结构,但是有些地方需要做些改善。首先,对于左右括号的处理,应该在递归S时判断左右括号的位置。其次,在识别a|b这种选择结构时,你的CFG中没有考虑到将选择结构展开的情况。最终,你的CFG中需要添加一些终止符号的定义。

    下面是一个更完整的、使用CFG识别正则表达式的例子:

    S -> E | E bar S
    E -> T | T star | T E
    T -> ltr | lpar S rpar

    其中,S表示正则表达式,E表示基本表达式,T表示因子(单元或组)。

    对于终止符,你可以定义:

    ltr -> 'a' | 'b' | ... | 'z' | 'A' | 'B' | ... | 'Z'
    lpar -> '('
    rpar -> ')'
    star -> '*'
    bar -> '|'
    eps -> 'ε'

    这样,对于输入的正则表达式,经过CFG的处理输出的结果就是2种情况,一个是能被接受的,一个是不能被接受的,这样就可以满足题目需求了。

    评论

报告相同问题?

悬赏问题

  • ¥50 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?