Verwendet Programmiersprache aus Quellcode - Datei ermitteln

Schuriko

Bekanntes Mitglied
Folgendes kleines Beispiel:
Java:
package mypckg;

public class MyApp
{
  public static void main( String[] args ) {
      
  }
}
myapp.java

PHP:
<php
    // mache irgendetwas
?>
myapp.php

XML:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.6.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <!-- Irgendetwas -->
</project>
my.pom

und noch zig weitere Dateien...

Wie kann man ermitteln aus einer Quelldatei es sich um eine xml, php, java, c#, etc. Datei handelt? Das Problem besteht darin das man von der zugrundliegenden Datei anhand der Endung nicht auf den Inhalt schlußfolgern kann - denn es hindert mich ja keiner daran Java Quellcode zu schreiben und die Datei dann mit der Endung php zu versehen, etc.

Also muss es dazu andere Möglichkeiten geben.

Ich bin bei meinen kurzen Rechern u.a. auf
  1. guesslag (https://guesslang.readthedocs.io/en/latest/) eine in pyhton geschriebenes Programm
  2. und github/linguist (https://github.com/github/linguist) eine in ruby geschriebens Programm


    gestoßen. Leider habe ich noch kein entsprechendes Pandon in Java gefunden. Kennt einer von euch evtl. ein in java geschriebenes Programm? Hintergrund: Ich habe keine Zeit mich lang mit pyhton oder ruby auseinander zu setzen.
 
XML ist relativ einfach, da es einen Prolog gibt. Ansonsten muss klar sein, dass das nicht 100 %-ig funktioniert, denn
Code:
class A {
    int a;
};
ist gültig in C++, Java und C#.

Unter dieser Voraussetzung ist also die Frage, wie gut eben gut genug ist. PHP könnte man noch am "<?php" erkennen, wobei es ja auch noch Short-Tags gibt (<?= ?> und <? ?>) .

Bei einem einfachen Vorgehen kann es natürlich passieren, dass ein in Java geschriebenes System.out.print("<?php ... ?>"); dann als PHP-Quelldatei erkannt wird.

Daher: wie gut ist gut genug?

Und wenn Du schon Tools gefunden hast, warum nutzt Du diese nicht?
 
XML ist relativ einfach, da es einen Prolog gibt.
Nunja - damit weiss man, dass es im XML Format ist. Aber Inhalt kann dennoch sonst irgendwas sein.

Das <?xml version="1.0" encoding="ISO-8859-1"?> kann html enthalt oder eine Oberfläche Beschreiben (fxml, XAML, ...)

Das ganze Anliegen fand ich also als relativ absurd. Warum sollte jemand Java Code als .php abspeichern? Selbst wenn Du ein Doctype findest - Ich wäre mir nicht sicher, dass die Loader für FXML oder XAML sich an einem <!DOCTYPE .... > wirklich stören würden ...

Und vor allem: Was ist mit einer html Seite, die dann php intern nutzt? Als was wird die dann erkannt? Die .php Endung wäre dann ignoriert und ein html wäre erkannt worden?
 
XML ist relativ einfach, da es einen Prolog gibt. Ansonsten muss klar sein, dass das nicht 100 %-ig funktioniert, denn
Code:
class A {
    int a;
};
ist gültig in C++, Java und C#.

Unter dieser Voraussetzung ist also die Frage, wie gut eben gut genug ist. PHP könnte man noch am "<?php" erkennen, wobei es ja auch noch Short-Tags gibt (<?= ?> und <? ?>) .

Bei einem einfachen Vorgehen kann es natürlich passieren, dass ein in Java geschriebenes System.out.print("<?php ... ?>"); dann als PHP-Quelldatei erkannt wird.

Daher: wie gut ist gut genug?

Und wenn Du schon Tools gefunden hast, warum nutzt Du diese nicht?
Alles gesagte ist mir wohl bekannt. Weshalb ich z.B. guesslang oder linguist verwende ist, dass es in mein Java-Projekt als fester Bestandteil integriert werden soll und dem obigen genannten Punkt, dass ich keine Zeit habe mich mit Pyhton oder Ruby auseinander zu setzen.
 
Weshalb ich z.B. guesslang oder linguist verwende ist, dass es in mein Java-Projekt als fester Bestandteil integriert werden soll und dem obigen genannten Punkt, dass ich keine Zeit habe mich mit Pyhton oder Ruby auseinander zu setzen.
OK, Du willst die Tools in Deine Java-Anwendung integrieren. Da bin ich im Prinzip raus, ich würde mir aber JRuby und Jython ansehen.
 
Das ganze Anliegen fand ich also als relativ absurd. Warum sollte jemand Java Code als .php abspeichern? Selbst wenn Du ein Doctype findest - Ich wäre mir nicht sicher, dass die Loader für FXML oder XAML sich an einem <!DOCTYPE .... > wirklich stören würden ...

Und vor allem: Was ist mit einer html Seite, die dann php intern nutzt? Als was wird die dann erkannt? Die .php Endung wäre dann ignoriert und ein html wäre erkannt worden?
Du sprichst hier von verschiedenen Dingen
  1. Es geht nicht um den Inhalt der ausgedrückt wird. XAML z.B. ist und bleibt XML. Die Aussage von XAML hingegen drückt Benutzeroberflöchen, Verhaltensweisen, grafische Elemente (Animationen), etc. aus.
  2. Auch wenn du es absurd findest, aber es ist praktisch möglich. Deshalb geht man von der zugrundeliegende Syntax aus.
  3. Ich verstehe was du meinst. Aber ein Datei in der sich PHP mit HTML - Code befindet, bleibt eine PHP Datei (Syntaxisch gesehen)
 
Aus meiner Sicht widersprichst Du Dir da selbst.

XML ist XML, egal was für ein Inhalt? Dann ist HTML auch nur XML. Auch wenn das PHP Anteile mit Drin sind -> Es ist und bleibt eine XML Datei.
Aber das willst Du ja eben doch nicht.

Und das Problem ist, dass es eben praktisch nicht wirklich möglich ist.
- Ein Beispiel ist schon genannt worden, wo Du nicht sagen kannst, ob es Java oder C++ ist.
- Die Endung, die Du ignorieren willst, ist wichtig. Davon hängt halt mit ab, was mit einer Seite gemacht wird. Als HTML kann es also eine Seite sein, die irgendwas mit php Blöcken enthält, die aber so auf der Seite einfach mitgesendet werden. (Keine Ahnung, was man da ggf. machen kann und wie Browser sowas ggf. anzeigen). Wenn es dann aber .php ist (und der Server entsprechend konfiguriert wurde), dann wird es von php ausgewertet.

Es mag da irgendwelche Dinge geben, die man schauen kann. Aber es wird sehr schwer, da wirklich sauber alles zu erkennen (Daher auch das "guess"lang. Da suggeriert der Name schon einiges.)

Mich würde da die eigentliche Problemstellung interessieren. Was musst Du da scannen / prüfen? Und zu welchem Zweck?

Was mehr Sinn machen kann, wäre die Endungen nicht zu ignorieren und dann zu schauen:
ist die .java Datei eine gültige Java Datei? -> Ein Java Parser wird es Dir sagen.
Ist die .php Datei eine gültige Datei? -> php Parser wird es geben ...
u.s.w.

Dann würdest Du ggf. nur Problemfälle betrachten müssen.
 

Zurück
Oben