Convert Algorithmen

Viele Internet Dienste convertieren eine Format in einer anderen z.B. von LateX 2 Html. Hat man eine Idee wie das programmiert ist? Mit etwa reguläre Ausdrucke?
 
Das ist immer unterschiedlich und hängt stark von den beteiligten Formaten ab.
Reguläre Ausdrücke sind meist viel zu ausdrucksschwach und zu unwartbar ("unmaintainable").
 
Eigentlich brauchst du da eine Art Compiler. Ein Compiler bringt ja etwas von einem Format in ein anderes. Da werden auch reguläre Ausdrücke verwendet, aber nur ganz am Anfang, um zu überprüfen, ob die Syntax korrekt ist.
Schau dir mal Compilerbau an, da bekommst du grob ein Verständnis, wie man sowas umsetzen könnte. Das ist allerdings schon ein recht fortgeschrittenes Thema.
 
Wie schwer eine Übersetzung ist, kommt immer auf die beteiligten Formate an.
Ich würde mal tippen, dass LaTeX --> MathML viel einfacher ist als C++ --> Java (und zwar vollständig). Letzteres, also mit vollständiger Abdeckung ist wahrscheinlich hoffnungslos und würde auch keiner versuchen.

Du musst auch beachten, dass es heutzutage auch viele Helferbibliotheken gibt fürs Lexen und Parsen.
 
Weil C++ wahnsinnig viele komplizierte Features mit komplizierten Semantiken hat, u.a. Template Metaprogrammierung, die turingvollständig ist.
 
meinst du in Java sehr schwer? wieso?
ComFreek hat nur gemeint, dass die vollständige Portierung von einer Programmiersprache in eine andere ziemlich anstrengend (bis hin zu gar unmöglich) sein kann.
Ein kleines Beispiel: In Python sind Funktionen First-Class-Objects. Man kann sie herumreichen und benutzen wie stinknormale Objekte.

Ich habe hier mal ein kleines Python-Programm geschrieben, das - aus welchen Gründen auch immer - eine benutzerdefinierte Funktion in eine Liste von Funktionen mit festgelegtem zweiten Argument umwandelt, und aus dieser Liste dann eine einzige Funktion zaubert, die ein weiteres Argument zum Aufruf erwartet und dieses als erstes Argument in die ursprüngliche Funktion einsetzt. Klar soweit?
Python:
import math
import operator


def main():
    fa_pow = function_array(math.pow, 10)
    ca_pow = call_all(fa_pow)
    
    fa_mul = function_array(operator.mul, 10)
    ca_mul = call_all(fa_mul)
    
    print(ca_pow(2))
    print(ca_mul(2))


def partial(func, /, *args, **keywords):
    """ STL function from module functools """
    def newfunc(*fargs, **fkeywords):
        newkeywords = {**keywords, **fkeywords}
        return func(*args, *fargs, **newkeywords)
    newfunc.func = func
    newfunc.args = args
    newfunc.keywords = keywords
    return newfunc


def function_array(func, n):
    return [partial(lambda a, b: func(b, a), i+1) for i in range(n)]


def call_all(function_array):
    def newfunc(value):
        return [f(value) for f in function_array]
    return newfunc


if __name__ == '__main__':
    main()
Jetzt übersetz' das doch mal nach Java o_O
Bin zwar kein Java Experte, aber ich lehne mich jetzt mal ganz weit aus dem Fenster und sage: Java Profis würden das hinkriegen. Zumindest könnten die etwas basteln, was dem Python Programm sehr nahe kommt. Aber kannst du dir vorstellen welches tiefgreifende und komplexe Verständnis ein maschinelles Übersetzungsprogramm haben müsste um das Ding fehlerfrei umzuschreiben? Und dazu kommt noch, dass eine Software die von Python nach Java übersetzt ja gar nicht wissen kann, wie eine bestimmte Codestelle vom Programmierer gemeint ist. Vielleicht habe ich das Programm absichtlich so geschrieben, weil ich es mit irgendeinem Python-Interface zu tun habe welches Listen von Funktionen erwartet? Und dieses Interface könnte in Java durchaus anders sein! Eine vernünftige Portierung kostet richtig Hirnschmalz.

Aber wie gesagt, das bezieht sich vor allem auf Programmiersprachen.

z.B. von LateX 2 Html.
Das hier dürfte viel einfacher sein. Das sind beides im Prinzip nur Auszeichnungssprachen. (Ich weiß, LaTeX kann Turing-vollständig sein)
Soll heißen: LaTeX erarbeitet im Prinzip die Info: Wo befindet sich was? Ob du daraus dann eine PDF machst, oder eine HTML-Seite, macht dann keinen so großen Unterschied mehr.

Gruß Technipion
 
Zurück