括号表达式

括号表达式


Time Limit:1sMemory limit:32M
Accepted Submit:173Total Submit:594

B.括号表达式

 

仅由括号()组成的表达式称之为括号表达式。
如果括号表达式中的括号能够配对,我们称该括号表达式为对称括号表达式。
在括号表达式中,去除对称括号表达式,我们称剩余的括号表达式为非对称括号表达式。
在非称括号表达式的两端添加最少的括号使得该表达式成为一个对称表达式,我们称之为最小对称括号表达式。
对于括号表达式“)()((()”,“()()”为其对称括号表达式,“)((”为其非对称括号表达式,“()(())”为其最小对称括号表达式。
给定一个括号表达式,你的任务就是输出该表达式的非对称括号表达式和最小对称括号表达式。

 

输入数据 (请使用标准输入输出,而不要读写文件)

 

每组输入数据的第一行为一个字符串S,字符串S仅由‘(’和‘)’组成,字符串非空且长度小于10000。

 

输出数据 (请使用标准输入输出,而不要读写文件)

 

对于每组数据,如果字符串S是对称括号表达式,只需要输出原字符串;否则输出两行,第一行为该表达式的非对称括号表达式,第二行为该表达式的最小对称括号表达式。

 

样例输入与输出

样例1:
输入输出
))((()
 
))((
(())(())
样例2:
输入输出
()()()()

Original: 福州大学第六届程序设计竞赛

http://acm.fzu.edu.cn/problem.php?pid=1706

 

 

有关字符串匹配的问题,用栈去存储字符串,如果下一个字符括号与前面一个字符括号匹配,那么前面一个字符括号出栈,否则进栈。这个实现起来比较简单,比较麻烦的是后面的要输出最小匹配串,由于此时栈中不匹配的字符一定是这种类型:)))(((()))))((((,所以,只要把它们扩展就可以了,但实现起来会比较麻烦一点儿,我就是在这儿错了好几次

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PE括号表达式是编译原理中用于构建语法树的实验。PE(Parsing Expression)是一种从正则表达式扩展而来的表达式语言,用于描述一些特定语法规则。在编译原理中,我们需要将源代码转化为可执行的程序,而构建语法树是其中一个重要的步骤。 PE括号表达式可以用于定义语法规则中的一些基本元素,如标识符、关键字、运算符等。通过使用括号将这些基本元素组合起来,可以实现复杂的语法规则,并将其转化为语法树。 PE括号表达式具有以下特点: 1. 可以使用括号进行分组,用于定义运算符的优先级和结合性。 2. 可以使用嵌套的括号表达式,用于定义复杂的语法规则。 3. 可以使用特殊符号来表示选择和循环,如“|”表示选择,而“*”表示零次或多次。 使用PE括号表达式构建语法树的过程如下: 1. 将源代码按照语法规则进行分割,得到一系列的语法单元。 2. 使用PE括号表达式对每个语法单元进行匹配,将其转化为相应的语法树节点。 3. 将匹配到的语法树节点连接起来,构建出完整的语法树。 4. 根据语法树进行语义分析和代码生成,最终生成可执行的程序。 PE括号表达式实验编译原理的核心目标是理解和掌握如何使用PE括号表达式描述和解析语法规则,进而实现源代码的转换和生成。通过这个实验,我们可以深入了解编译原理的相关概念和技术,并培养编写高效、可靠的编译器的能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值