繁体   English   中英

c++ 中的正则表达式,用于处理一些模式

[英]Regex in c++ for maching some patters

我想要这个的正则表达式。

  • add x2, x1, x0 是有效指令;

我想实现这个。 但是有点困惑,因为我是使用 Regex 的新手。 任何人都可以分享这些正则表达式吗?

如果这是一个较长的项目并且以后会有更多的要求,那么采用不同的方法肯定会更好。

解决此类问题的标准方法是定义语法,然后创建词法分析器和解析器。 lex/yacc 或 flex/bison 工具可以用于此。 或者,也可以手工制作一个简单的移位/归约解析器。

你用给定语法描绘的语言,可能确实用 Chomsky class 3 语法指定,因此可以用常规语法生成。 然后,用正则表达式进行解析。

关于寄存器是什么以及是否有更多关键字,规范有点不清楚。 尤其是ecall不清楚。

但是如何构建这样的正则表达式呢?

您将定义小标记并将它们连接起来。 并且不同的路径可以用 or 运算符|来实现 .

让我们举个例子。

  • 寄存器可以与a\d+匹配。 因此,“a”后跟一些数字。 如果它不仅是“a”,还有其他字母,你可以使用[az]\d+
  • 具有相同数量参数的操作码可以用简单的或|列出。 . 就像在add|sub
  • 对于空间,有很多解决方案。 您可以使用\s+[ ]+或您需要的任何空格。
  • 要构建一个规则,您可以将到目前为止所学的内容串联起来
  • 有不同的部分需要一个或| 完整路径
  • 如果你想找回匹配的组,你必须把需要的东西括在括号里

因此,许多可能的解决方案之一可以是:

^[ ]*((add|sub)[ ]+(a\d+)[ ]*,[ ]*(a\d+)[ ]*,[ ]*(a\d+)|(ecall))[ ]*$

请参阅以下示例: regex101

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM