To my knowledge, nobody has contributed parsing of attributes and extensions (a change to the OCaml syntax whose use is central to many of the ppx extensions) to camlp4 or camlp5 (which implement their own OCaml parsers and thus need to be updated accordingly). It would not necessarily be too difficult to do so, but that means that currently you cannot combine camlp{4,5} and PPX extensions within the same source file.
There is another way to understand your question: if you have developed camlp{4,5} extensions, how hard is it to port them to ppx, or conversely to port a ppx extension to camlp{4,5}? My answer would be "rather easy", knowing that there are two separate aspects:
- The first thing an extension does is to parse some part of the user input to recognize extension-specific code. This is relatively easy to do using both systems, but done in a completely different ways, so this part (the "frontend") of the extension needs to be completely rewritten. In addition, ppx is more restricted than camlp{4,5} in terms of the flexibility to change the syntax (this is a feature), so some things that are easy to do for camlp{4,5} extensions may require some thoughts about how to express this with extensions/attributes instead.
- Once the extension has recognized the information it relies on within the user source code, it will do some extension-specific stuff and spit some AST out. This is very easy to port from one extension to the other, and most of this part of the code (the "backend") can be reused.