2016-08-06 5 views
1

yaccとlexを使ってmipsアセンブリパーサーで作業しているので、指定された命令のレジスタを認識する必要があります。レジスタができること:MIPSレジスタ正規表現

  • $t0,$t1,...$t31
  • $zero
  • r0,r1,...,r31
  • R0,R1,...,R31

私は、最初の部分($t0,...,$t31R0,...$R31)を実行しようとしましたが、それは働いていません。私の正規表現は(\$t|R)([1|2][0-9]|3[0-1]|[0-9])です。イメージ1にあるように、正規表現はレジスタのR5と一致しますが、これは望ましくありません。どうすればこの問題を解決できますか?

Regex test from RegExr

+0

単語境界 '\ b'が必要です: - ** ['(\ $ t | \ bR)([1 | 2] [0-9] | 3 [0-1] | [0-9] )\ b'](https://regex101.com/r/rK6bA0/1)** – rock321987

答えて

2

私が使用する:

((?:\$t|[rR])(?:[12]?[0-9]|3[01]))\b|(\$zero) 

が一致する:(ワード境界\bのおかげで)0〜32の数字が続く

  • $t又はRまたはr
  • $zero

live demoを参照してください。