Die Klasse CFMLTransformer ist das Herzstck des ᅵbersetzungsprozess, es liest die bergebene CFML Datei ein und bersetzt diese in ein valid (CFXD) XML Dokument in der Form eines org.w3c.dom.Document Object, die dann als weitere Vorlage zum bersetzten in PHP dient. Der CFMLTransformer bersetzt nur die Tags die innerhalb einer CFML Seite vorkommen, nicht die Ausdrcke die innerhalb von Attributen und dem Body eines Tag vorkommen knnen, fr dies ist der ExprTransformer zust¦ndig, der in der jeweiligen Tag Library definiert ist. Der CFMLTransformer kann zwar durch seine Grammatik, Tags erkennen aber nicht validieren. Erst mithilfe der im zugeteilten Tag Libraries kann er vergleichen ob ein Tag nur ein normaler HTML Tag ist, das er einfach als literale Zeichenkette aufnimmt, oder ob es sich um einen Tag handelt der eine konkrete Anweisung implementiert. Die Tag Library definiert alle in CFML vorhanden Tags, deren individuelle Grammatik und deren Aufbau und Verhalten.
Parser Grammatik nach EBNF (Extended Backus-Naur Form) transform = {body} body = [comment] ("" | "<" tag body | literal body); comment = ""} "--->"; literal = ("<" | {?-"#"-"<"} "<" | {"#" expression "#"} "<" ) | ({?-"<"} "<") (* Welcher Teil der "oder" Bedingung ausgefhrt wird, ist abh¦ngig was die Tag-Lib vorgibt, dass Expression geparst werden sollen oder nicht. *) tag = name-space identifier spaces attributes ("/>" | ">" [body "" identifier spaces ">"]); (* Ob dem Tag ein Body und ein End-Tag folgt ist abh¦ngig von Definition des body-content in Tag-Lib, gleices gilt fr appendix *) name-space = < tagLib[].getNameSpaceAndSeperator() >; (* Vergleicht Zeichen mit den Namespacedefinitionen der Tag Libraries. *) attributes = ({spaces attribute} "/>" | {spaces attribute} ">") | attribute-value; (* Welcher Teil der "oder" Bedingung ausgefhrt wird, ist abh¦ngig von der Tag Attribute Definition in der Tag Lib. *) attribute = attribute-name spaces "=" spaces attribute-value; attribute-name = ("expression"|'expression'|expression) | identifier; (* Ruft identifier oder den Expression Transformer auf je nach Attribute Definition in der Tag Lib. *) attribute-value = expression; identifier = (letter | "_") {letter | "_"|digit}; letter = "a".."z"|"A".."Z"; digit = "0".."9"; expression = ; (* Ruft den Expression Transformer auf. *) spaces = {space}; space = "\s"|"\t"|"\f"|"\t"|"\n"; {"x"}= 0 bis n mal "x" ["x"]= 0 bis 1 mal "x" ("x" | "y")"z" = "xz" oder "yz"