Hey all, Bit of context: I'm writing a compiler for a course and decided to use Racket. I'm translating an AST to three address code-like instructions. Because I do not want to manually write a great deal of boilerplate code for each opcode, I figured I could use macros.
I have a struct `instruction' that holds the argument registers/options, result register, and the opcode. Using the macro I have in mind, I could for instance generate all boilerplate for the A2 opcode (A = B binop C): (define-opcode A2 (result #t) (arg left) (arg right) (arg relop)) This would create the functions: - (make-A2 left right relop result), which creates a new instance of the instruction struct - (A2? obj), which checks if obj is an instruction struct and the opcode maches A2 - (A2-left obj) and so on, all accessor functions In an opcode constructor such as make-A2, result is always the last argument, and all other arguments are in the order in which they are defined. I already managed to write a much more simple version, which can be used as follows: (define-opcode A2 #t 3) Which will just generate functions like make-A2, A2-arg1, A2-arg2, and so on. However, I prefer the version with (result ...) and (arg ...), but I just can't figure out how to write a macro for it, given that there must be only one occurence of (result ...) and zero or more occurences of (arg ...). I hope someone will be able to help me or point me to some similar macros for inspiration! Greetings, Nils Van Geele. -- You received this message because you are subscribed to the Google Groups "Racket Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to racket-users+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.