簡體   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