#include <StringConstants.au3> ; to declare the Constants of StringRegExp
#include <Array.au3> ; UDF needed for _ArrayDisplay and _ArrayConcatenate
Local $sRegex = "(?xm)^[ \t]*(?:(?<label>[a-zA-Z0-9_]+):[ \t]*)?" & @CRLF & _
"(?:" & @CRLF & _
" (?<op>[a-zA-Z0-9_\.]+)" & @CRLF & _
" (?:" & @CRLF & _
" (?:" & @CRLF & _
" (?:" & @CRLF & _
" [ \t]*" & @CRLF & _
" (?:" & @CRLF & _
" (?<h0>[-+]?[0oO]?[xX][a-fA-F0-9]{1,8})" & @CRLF & _
" | " & @CRLF & _
" (?<o0>[-+]?[0oO][0-7]+)" & @CRLF & _
" | " & @CRLF & _
" (?<b0>[-+]?[0oO]?[bB][01]{1,32})" & @CRLF & _
" |" & @CRLF & _
" (?<l0>[a-zA-Z0-9_]+)" & @CRLF & _
" |" & @CRLF & _
" (?<d0>[-+]?\#?\d+)" & @CRLF & _
" )" & @CRLF & _
" [ \t]*" & @CRLF & _
" (?:\((?<r0b>\$[a-zA-Z0-9_]{2,5})\))?[ \t]*" & @CRLF & _
" )" & @CRLF & _
" |" & @CRLF & _
" [ \t]*(?<r0>\$[a-zA-Z0-9_]{2,5})[ \t]*" & @CRLF & _
" (?:" & @CRLF & _
" (?:" & @CRLF & _
" ,[ \t]*" & @CRLF & _
" (?:" & @CRLF & _
" (?<d1>[-+]?\#?\d+)" & @CRLF & _
" | " & @CRLF & _
" (?<h1>[-+]?[0oO]?[xX][a-fA-F0-9]{1,8})" & @CRLF & _
" | " & @CRLF & _
" (?<o1>[-+]?[0oO][0-7]+)" & @CRLF & _
" | " & @CRLF & _
" (?<b1>[-+]?[0oO]?[bB][01]{1,32})" & @CRLF & _
" |" & @CRLF & _
" (?<l1>[a-zA-Z0-9_]+)" & @CRLF & _
" )" & @CRLF & _
" [ \t]*" & @CRLF & _
" (?:\((?<r1b>\$[a-zA-Z0-9_]{2,5})\))?[ \t]*" & @CRLF & _
" )" & @CRLF & _
" |" & @CRLF & _
" ,[ \t]*(?<r1>\$[a-zA-Z0-9_]{2,5})[ \t]*" & @CRLF & _
" (?:" & @CRLF & _
" (?:" & @CRLF & _
" ,[ \t]*" & @CRLF & _
" (?:" & @CRLF & _
" (?<d2>[-+]?\#?\d+)" & @CRLF & _
" | " & @CRLF & _
" (?<h2>[-+]?[0oO]?[xX][a-fA-F0-9]{1,8})" & @CRLF & _
" | " & @CRLF & _
" (?<o2>[-+]?[0oO][0-7]+)" & @CRLF & _
" | " & @CRLF & _
" (?<b2>[-+]?[0oO]?[bB][01]{1,32})" & @CRLF & _
" |" & @CRLF & _
" (?<l2>[a-zA-Z0-9_]+)" & @CRLF & _
" )" & @CRLF & _
" [ \t]*" & @CRLF & _
" (?:\((?<r2b>\$[a-zA-Z0-9_]{2,5})\))?[ \t]*" & @CRLF & _
" )" & @CRLF & _
" |" & @CRLF & _
" ,[ \t]*(?<r2>\$[a-zA-Z0-9_]{2,5})[ \t]*" & @CRLF & _
" )?" & @CRLF & _
" )?" & @CRLF & _
" )?" & @CRLF & _
" )?" & @CRLF & _
")?" & @CRLF & _
"(?<pseudo_op>" & @CRLF & _
" \." & @CRLF & _
" (?<name>[a-zA-Z]+)" & @CRLF & _
" [ \t]*" & @CRLF & _
" (?<arg>" & @CRLF & _
" (?<hp0>[-+]?[0oO]?[xX][a-fA-F0-9]{1,8})" & @CRLF & _
" | " & @CRLF & _
" (?<bp0>[-+]?[0oO]?[bB][01]{1,32})" & @CRLF & _
" |" & @CRLF & _
" (?<op0>[-+]?[0oO][0-7]+)" & @CRLF & _
" | " & @CRLF & _
" (?<dp0>[-+]?\#?\d+)" & @CRLF & _
" | " & @CRLF & _
" (?<lp0>[a-zA-Z0-9_]+)" & @CRLF & _
" )" & @CRLF & _
" [ \t]*" & @CRLF & _
")?" & @CRLF & _
"(?:[ \t]*(?<comment>[!;].*)?)" & @CRLF & _
"$"
Local $sString = "!============================================================" & @CRLF & _
"! CS-2200 Homework 1" & @CRLF & _
"!" & @CRLF & _
"! Please do not change main's functionality," & @CRLF & _
"! except to change the argument for factorial or to meet your" & @CRLF & _
"! calling convention" & @CRLF & _
"!============================================================" & @CRLF & _
"main: la $sp, stack ! load address of stack label into $sp" & @CRLF & _
" lw $sp, 0($sp) ! FIXME: load desired value of the stack" & @CRLF & _
" ! (defined at the label below) into $sp" & @CRLF & _
" la $at, factorial ! load address of factorial label into $at" & @CRLF & _
" addi $a0, $zero, 5 ! $a0 = 5, the number to factorialize" & @CRLF & _
" jalr $at, $ra ! jump to factorial, set $ra to return addr" & @CRLF & _
" halt ! when we return, just halt" & @CRLF & _
"factorial: " & @CRLF & _
" sw $a0, 0($sp) ! put i, the first parameter, on stack" & @CRLF & _
" addi $sp, $sp, -4 ! leave space for argument, return value, return address, and old frame pointer" & @CRLF & _
" sw $fp, 1($sp) ! store old frame pointer" & @CRLF & _
" addi $fp, $sp, 0 ! frame pointer points to first local variable " & @CRLF & _
" sw $ra, 2($fp) ! store return address" & @CRLF & _
" lw $t0, 4($fp) ! load i to $t0" & @CRLF & _
" beq $t0, $zero, base ! if i == 0, branch to base case" & @CRLF & _
" addi $a0, $t0, -1 ! $a0 = i - 1" & @CRLF & _
" addi $sp, $sp, -1 ! start a new frame" & @CRLF & _
" jalr $at, $ra ! calls factorial(i - 1)" & @CRLF & _
" lw $t2, 0($sp) ! $t2 = factorial(i - 1)" & @CRLF & _
" addi $sp, $sp, 2 ! pop return value and argument from stack" & @CRLF & _
" lw $t0, 4($fp) ! load argument from run-time stack" & @CRLF & _
" addi $t1, $zero, 0 ! $t1 is the counter" & @CRLF & _
" addi $v0, $zero, 0 ! initialize $v0 as 0" & @CRLF & _
"mult: beq $t1, $t2, exit ! branch to exit if equal" & @CRLF & _
" add $v0, $v0, $t0" & @CRLF & _
" addi $t1, $t1, 1" & @CRLF & _
" beq $zero, $zero, mult" & @CRLF & _
"base: addi $v0, $zero, 1 ! $v0 stores 1" & @CRLF & _
" sw $v0, 0($fp) ! store result in memory for fn" & @CRLF & _
"return: lw $v0, 0($fp) ! load return value from fn" & @CRLF & _
" sw $v0, 3($fp) ! save return value" & @CRLF & _
" lw $ra, 2($fp) ! restore return address" & @CRLF & _
" addi $sp, $fp, 3 ! stack pointer points to return value" & @CRLF & _
" lw $fp, 1($fp) ! restore frame pointer" & @CRLF & _
" jalr $ra, $zero ! return" & @CRLF & _
"exit: sw $v0, 0($fp) ! store result in memory for fn" & @CRLF & _
" beq $zero, $zero, return" & @CRLF & _
"stack: .word 0x4000 ! the stack begins here (for example, that is)" & @CRLF & _
"" & @CRLF & _
"" & @CRLF & _
"" & @CRLF & _
"" & @CRLF & _
"" & @CRLF & _
"" & @CRLF & _
"" & @CRLF & _
"" & @CRLF & _
"" & @CRLF & _
"" & @CRLF & _
"" & @CRLF & _
""
Local $aArray = StringRegExp($sString, $sRegex, $STR_REGEXPARRAYGLOBALFULLMATCH)
Local $aFullArray[0]
For $i = 0 To UBound($aArray) -1
_ArrayConcatenate($aFullArray, $aArray[$i])
Next
$aArray = $aFullArray
; Present the entire match result
_ArrayDisplay($aArray, "Result")
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for AutoIt, please visit: https://www.autoitscript.com/autoit3/docs/functions/StringRegExp.htm