DE202015009280U1 - Integrierte domänenspezifische Sprachen als erstklassige Codeartefakte - Google Patents

Integrierte domänenspezifische Sprachen als erstklassige Codeartefakte Download PDF

Info

Publication number
DE202015009280U1
DE202015009280U1 DE202015009280.2U DE202015009280U DE202015009280U1 DE 202015009280 U1 DE202015009280 U1 DE 202015009280U1 DE 202015009280 U DE202015009280 U DE 202015009280U DE 202015009280 U1 DE202015009280 U1 DE 202015009280U1
Authority
DE
Germany
Prior art keywords
programming language
platform
independent
integrated
extension
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
DE202015009280.2U
Other languages
English (en)
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Google LLC
Original Assignee
Google LLC
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Google LLC filed Critical Google LLC
Publication of DE202015009280U1 publication Critical patent/DE202015009280U1/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • G06F8/427Parsing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

System, das Folgendes umfasst: einen oder mehrere Prozessor(en); und ein nicht transitorisches computerlesbares Medium, das gekoppelt ist mit dem einen oder den mehreren Prozessoren, die darin gespeicherte Anweisungen aufweisen, die, wenn sie durch den einen oder die mehreren Prozessoren ausgeführt werden, den einen oder die mehreren Prozessoren veranlassen, Operationen durchzuführen, umfassend: das Analysieren einer plattformunabhängigen Programmiersprache in einer Quelldatei (110) mithilfe eines Analysators plattformunabhängiger Programmierung (120), worin der Analysator plattformunabhängiger Programmierung eine Erweiterung (130) zur Analyse integrierter Programmiersprachen beinhaltet; als Reaktion auf das Erkennen einer integrierten Programmiersprache in der Quelldatei durch den Analysator plattformunabhängiger Programmierung das Aufrufen der Erweiterung zur Analyse der integrierten Programmiersprache; das Bereitstellen von Daten über die plattformunabhängige Programmiersprache an die Erweiterung zur Analyse der integrierten Programmiersprachen; und das Generieren von semantischen Informationen über die integrierte Programmiersprache und die plattformunabhängige Programmiersprache, worin Teile der Quelldatei, die sich in der integrierten Programmiersprache befinden, Teilen der Quelldatei, die sich in der plattformunabhängigen Programmiersprache befinden, über die semantischen Informationen zugewiesen werden.

Description

  • Unter Schutz gestellt werden und Gegenstand des Gebrauchsmusters sind dabei, entsprechend den Vorschriften des Gebrauchsmustergesetzes, lediglich Vorrichtungen wie in den beigefügten Schutzansprüchen definiert, jedoch keine Verfahren. Soweit nachfolgend in der Beschreibung gegebenenfalls auf Verfahren Bezug genommen wird, dienen diese Bezugnahmen lediglich der beispielhaften Erläuterung der in den beigefügten Schutzansprüchen unter Schutz gestellten Vorrichtung oder Vorrichtungen.
  • HINTERGRUND
  • Entwickler schreiben große Mengen von Code in plattformunabhängigen Programmiersprachen (z. B. Programmiersprachen, die nicht auf die Verwendung innerhalb einer spezifischen Anwendungsdomäne begrenzt sind, sondern für das Schreiben von Software in einer Vielzahl von Anwendungsdomänen verwendet werden können) wie C++, Java, usw. Manchmal sind diese plattformunabhängigen Sprachen nicht ausdrucksstark genug oder zu umständlich für eine bestimmte Problemdomäne. Ein Ansatz von Entwicklern besteht darin, diese Probleme zu umgehen oder den Aufwand zu meiden und domänenspezifische Sprachen zu verwenden (z. B. Programmiersprachen speziell für eine bestimmte Anwendungsdomäne).
  • KURZDARSTELLUNG
  • Diese Zusammenhang führt eine Auswahl an Konzepten in einer vereinfachten Form ein, um ein grundlegendes Verständnis von einigen Aspekten der vorliegenden Offenbarung. Diese Zusammenfassung ist keine umfangreiche Übersicht über die Offenbarung und zielt nicht darauf ab, Schlüssel- oder kritischen Elemente der Offenbarung festzustellen, oder den Umfang der Offenbarung abzugrenzen. Diese Zusammenfassung stellt bloß einige der Konzepte der Offenbarung dar, wie eine Einleitung zur ausführlichen Beschreibung, die unten zur Verfügung gestellt wird.
  • Die vorliegende Offenbarung betrifft Verfahren und Systeme zur Bereitstellung von Webservices an Benutzer. Insbesondere betreffen Aspekte der vorliegenden Offenbarung die Bereitstellung von semantischen Informationen über integrierte Programmiersprachen, die in diesen plattformunabhängigen Programmiersprachen enthalten sind.
  • Eine Ausführungsform der vorliegenden Offenbarung betrifft ein computerimplementiertes Verfahren Folgendes umfassend: Analyse einer plattformunabhängigen Programmiersprache in einer Quelldatei mithilfe eines Analysators plattformunabhängiger Programmierung, worin der Analysator plattformunabhängiger Programmierung eine Erweiterung zur Analyse integrierter Programmiersprachen beinhaltet; als Reaktion auf das Erkennen einer integrierten Programmiersprache in der Quelldatei durch den Analysator plattformunabhängiger Programmierung Aufruf der Erweiterung zur Analyse der integrierten Programmiersprachen; Bereitstellen von Daten über die plattformunabhängige Programmiersprache an die Erweiterung zur Analyse der integrierten Programmiersprachen; und Generieren der semantischen Informationen über die integrierte Programmiersprache und die plattformunabhängige Programmiersprache, worin Teile der Quelldatei, die sich in der integrierten Programmiersprache befinden, Teilen der Quelldatei, die sich in der plattformunabhängigen Programmiersprache befinden über die semantischen Informationen zugewiesen werden.
  • In einer anderen Ausführungsform umfasst das Verfahren des Weiteren das Hinzufügen der semantischen Informationen über die integrierte Programmiersprache und die plattformunabhängige Programmiersprache zu einem für die integrierte Programmiersprache und die plattformunabhängige Programmiersprache erstellten Modell.
  • In einer anderen Ausführungsform umfasst das Verfahren des Weiteren die Analyse eines abstrakten Syntaxbaums eines Konstrukts für das Aufrufen der Erweiterung zur Analyse der integrierten Programmiersprachen, und Bereitstellen von Daten über die plattformunabhängige Programmiersprache an die Erweiterung zur Analyse der integrierten Programmiersprachen aufgrund der Analyse des abstrakten Syntaxbaums.
  • In wieder einer anderen Ausführungsform umfasst das Verfahren des Weiteren die Verwendung von Heuristik zur Zuordnung (Mapping) der Argumente der plattformunabhängigen Programmiersprache zu anderen Stellen in einem abstrakten Syntaxbaum der plattformunabhängigen Programmiersprache und Bereitstellen von Daten über die plattformunabhängige Programmiersprache an die Erweiterung zur Analyse der integrierten Programmiersprachen aufgrund der zugeordneten Argumente.
  • In wiederum einer anderen Ausführungsform umfasst das Verfahren des Weiteren das Ermitteln – aufgrund der Daten über die plattformunabhängige Programmiersprache, die an die Erweiterung zur Analyse der integrierten Programmiersprachen bereitgestellt wurden – ob einer der Knoten von der plattformunabhängigen Programmiersprache einen eindeutigen Namen besitzt und die Adressierung des Knotens von der plattformunabhängigen Programmiersprache mithilfe des eindeutigen Namens.
  • In wieder einer anderen Ausführungsform umfasst das Verfahren des Weiteren das Hinzufügen eines Knotens zu einer Grafik durch den Analysator plattformunabhängiger Programmierung, wobei der Knoten einen nichteindeutigen Namen und einen Kantensatz zwischen dem Knoten mit dem nichteindeutigen Namen und dem Knoten mit dem eindeutigen Namen hat, und Hinzufügen, durch die Erweiterung zur Analyse der integrierten Programmiersprachen, einer Kante zu dem Knoten mit dem nichteindeutigen Namen, wobei der Knoten mit dem eindeutigen Namen mithilfe der Kante von dem Knoten mit dem nichteindeutigen Namen identifiziert wird.
  • Eine weitere Ausführungsform der vorliegenden Offenbarung betrifft ein System umfassend einen oder mehrere Prozessoren und ein nichtflüchtiges computerlesbares Medium gekoppelt mit einem oder mehreren Prozessoren mit gespeicherten Befehlen, das Operationen durchführt, wenn es von Prozessoren ausgeführt wird, Folgendes umfassend: Analyse einer plattformunabhängigen Programmiersprache in einer Quelldatei mithilfe eines Analysators plattformunabhängiger Programmierung, worin der Analysator plattformunabhängiger Programmierung eine Erweiterung zur Analyse integrierter Programmiersprachen beinhaltet; als Reaktion auf das Erkennen einer integrierten Programmiersprache in der Quelldatei durch den Analysator plattformunabhängiger Programmierung Aufruf der Erweiterung zur Analyse der integrierten Programmiersprachen; Bereitstellen von Daten über die plattformunabhängige Programmiersprache an die Erweiterung zur Analyse der integrierten Programmiersprachen; und Generieren der semantischen Informationen über die integrierte Programmiersprache und die plattformunabhängige Programmiersprache, worin Teile der Quelldatei, die sich in der integrierten Programmiersprache befinden, Teilen der Quelldatei, die sich in der plattformunabhängigen Programmiersprache befinden über die semantischen Informationen zugewiesen werden.
  • In einer anderen Ausführungsform werden der eine oder die mehreren Prozessoren des Systems dazu veranlasst, weitere Operationen durchzuführen umfassend das Hinzufügen der semantischen Informationen über die integrierte Programmiersprache und die plattformunabhängige Programmiersprache zu einem für die integrierte Programmiersprache und die plattformunabhängige Programmiersprache erstellten Modell.
  • In einer anderen Ausführungsform werden der eine oder die mehreren Prozessoren des Systems dazu veranlasst, weitere Operationen durchzuführen umfassend die Analyse eines abstrakten Syntaxbaums eines Konstrukts für das Aufrufen der Erweiterung zur Analyse der integrierten Programmiersprachen, und Bereitstellen von Daten über die plattformunabhängige Programmiersprache an die Erweiterung zur Analyse der integrierten Programmiersprachen aufgrund der Analyse des abstrakten Syntaxbaums.
  • In wieder einer anderen Ausführungsform werden der eine oder die mehreren Prozessoren des System dazu veranlasst, weitere Operationen durchzuführen umfassend: die Verwendung von Heuristik zur Zuordnung (Mapping) der Argumente der plattformunabhängigen Programmiersprache zu anderen Stellen in einem abstrakten Syntaxbaum der plattformunabhängigen Programmiersprache und Bereitstellen von Daten über die plattformunabhängige Programmiersprache an die Erweiterung zur Analyse der integrierten Programmiersprachen aufgrund der zugeordneten Argumente.
  • In wiederum einer anderen Ausführungsform werden der eine oder die mehreren Prozessoren des Systems veranlasst, weitere Operationen durchzuführen das Folgende umfassend: Durchführen einer Kontrollflussanalyse für die plattformunabhängige Programmiersprache; und Bereitstellen von Daten über die plattformunabhängige Programmiersprache an die Erweiterung zur Analyse der integrierten Programmiersprachen aufgrund der Kontrollflussanalyse.
  • In einer anderen Ausführungsform werden der eine oder die mehreren Prozessoren des Systems veranlasst, weitere Operationen durchzuführen das Folgende umfassend: Durchführen einer dynamischen Programmanalyse für die plattformunabhängige Programmiersprache; und Bereitstellen von Daten über die plattformunabhängige Programmiersprache an die Erweiterung zur Analyse der integrierten Programmiersprachen aufgrund der dynamischen Programmanalyse.
  • In wieder einer anderen Ausführungsform werden der eine oder die mehreren Prozessoren des Systems dazu veranlasst, weitere Operationen durchzuführen Folgendes umfassend: Erkennen des Verhältnisses zwischen der plattformunabhängigen Programmiersprache und der integrierten Programmiersprache mithilfe maschinellen Lernens; und Bereitstellen von Daten über die plattformunabhängige Programmiersprache an die Erweiterung zur Analyse der integrierten Programmiersprachen aufgrund des vom maschinellen Lernen bestimmten Verhältnisses.
  • In wiederum einer anderen Ausführungsform werden der eine oder die mehreren Prozessoren des Systems veranlasst, weitere Operationen durchzuführen das Folgende umfassend: das Ermitteln – aufgrund der Daten über die plattformunabhängige Programmiersprache, die an die Erweiterung zur Analyse der integrierten Programmiersprachen bereitgestellt wurden – ob einer der Knoten von der plattformunabhängigen Programmiersprache einen eindeutigen Namen besitzt und die Adressierung des Knotens von der plattformunabhängigen Programmiersprache mithilfe des eindeutigen Namens.
  • In wiederum einer anderen Ausführungsform werden der eine oder die mehreren Prozessoren des Systems dazu veranlasst, weitere Operationen durchzuführen Folgendes umfassend: das Hinzufügen eines Knotens zu einer Grafik durch den Analysator plattformunabhängiger Programmierung, wobei der Knoten einen nichteindeutigen Namen und einen Kantensatz zwischen dem Knoten mit dem nichteindeutigen Namen und dem Knoten mit dem eindeutigen Namen hat, und Hinzufügen, durch die Erweiterung zur Analyse der integrierten Programmiersprachen, einer Kante zu dem Knoten mit dem nichteindeutigen Namen, wobei der Knoten mit dem eindeutigen Namen mithilfe der Kanten von dem Knoten mit dem nichteindeutigen Namen identifiziert wird.
  • Eine weitere Ausführungsform der vorliegenden Offenbarung betrifft ein System umfassend einen oder mehrere Prozessoren und ein nichtflüchtiges computerlesbares Medium gekoppelt mit einem oder mehreren Prozessoren mit gespeicherten Befehlen, das Operationen durchführt, wenn es von Prozessoren ausgeführt wird, Folgendes umfassend: Analyse einer plattformunabhängigen Programmiersprache in einer Quelldatei mithilfe eines Analysators plattformunabhängiger Programmierung, worin der Analysator plattformunabhängiger Programmierung eine Erweiterung zur Analyse integrierter Programmiersprachen beinhaltet; als Reaktion auf das Erkennen einer integrierten Programmiersprache in der Quelldatei durch den Analysator plattformunabhängiger Programmierung Aufruf der Erweiterung zur Analyse der integrierten Programmiersprachen; Bereitstellen von Daten über die plattformunabhängige Programmiersprache an die Erweiterung zur Analyse der integrierten Programmiersprachen; und Generieren der semantischen Informationen über die integrierte Programmiersprache und die plattformunabhängige Programmiersprache, worin Teile der Quelldatei, die sich in der integrierten Programmiersprache befinden, Teilen der Quelldatei, die sich in der plattformunabhängigen Programmiersprache befinden über die semantischen Informationen zugewiesen werden.
  • In einer oder mehreren anderen Ausführungsformen können die hier beschriebenen Verfahren und Systeme optional eine oder mehrere der folgenden zusätzlichen Merkmale beinhalten: die semantischen Informationen über die integrierte Programmiersprache und die plattformunabhängige Programmiersprache sind in einem Graph zum Modell als Knoten und Kanten hinzugefügt; die Daten über die plattformunabhängige Programmiersprache, die der Erweiterung zur Analyse der integrierten Programmiersprachen bereitgestellt wurden, beinhalten Informationen, die ein Konstrukt der integrierten Programmiersprache Konstrukten von der plattformunabhängigen Programmiersprache zuweisen, die für den Aufruf der Erweiterungsinstanz zur Analyse der integrierten Programmiersprachen relevant sind; die Konstrukte von der plattformunabhängigen Programmiersprache beinhalten eine oder mehrere der Folgenden: Argumente, Instanzen, auf denen die integrierte Programmiersprache aufgerufen wird, und den Umfang der Instanzen, auf denen die integrierte Programmiersprache aufgerufen wird; die Daten über die plattformunabhängige Programmiersprache, die der Erweiterung zur Analyse der integrierten Programmiersprachen bereitgestellt werden, beruhen auf der für die plattformunabhängige Programmiersprache durchgeführte Kontrollflussanalyse; die Daten über die plattformunabhängige Programmiersprache, die der Erweiterung zur Analyse der integrierten Programmiersprachen bereitgestellt werden, beruhen auf der der dynamischen Programmanalyse, die für die plattformunabhängige Programmiersprache durchgeführt wird; die Daten über die plattformunabhängige Programmiersprache, die der Erweiterung zur Analyse der integrierten Programmiersprachen bereitgestellt werden, beruhen auf maschinellem Lernen, das zur Bestimmung des Verhältnisses zwischen der plattformunabhängigen Programmiersprache und der integrierten Programmiersprache verwendet wird; und/oder die Knoten im Graph beinhalten Knoten von der integrierten Programmiersprache und Knoten von der plattformunabhängigen Programmiersprache, und worin sich die Kanten im Graph zwischen den Knoten von der integrierten Programmiersprache und den Knoten von der plattformunabhängigen Programmiersprache kreuzen.
  • Die Ausführungsformen einiger oder aller der hier offenbarten Prozessoren und Speichersysteme können auch so konfiguriert werden, dass einige oder alle Ausführungsformen des oben offenbarten Verfahrens durchgeführt werden. Ausführungsformen von einigen oder allen oben offengelegten Verfahren, können auch als Anweisungen dargestellt werden, die auf den vorübergehenden oder nicht-vorübergehenden, prozessorlesbaren Speichermedien enthalten sind, wie optische oder magnetische Speicher oder als ein fortgepflanztes Signal, das einem Prozessor oder Datenverarbeitungsgerät über ein Kommunikationsnetzwerk wie z. B. eine Internet- oder Telefonverbindung bereitgestellt wird.
  • Weiterhin wird der Umfang der Anwendbarkeit des Verfahrens und der Systeme der vorliegenden Offenbarung aus der nachfolgenden detaillierten Beschreibung offenbar werden. Jedoch sollte klargestellt werden, dass die ausführliche Beschreibung und spezifischen Beispiele nur durch Figuren bei der Angabe von Ausführungsformen der Verfahren und der Systeme gegeben werden, da verschiedene Änderungen und Modifikationen innerhalb des Geistes und des Umfangs der hierin offengelegten Konzepte für diejenigen erkennbar werden, die in der Kunst der detaillierten Beschreibung erfahren sind.
  • KURZBESCHREIBUNG DER ZEICHNUNGEN
  • Diese und andere Objekte, Merkmale und Eigenschaften der vorliegenden Offenbarung werden Fachleuten auf dem Gebiet aus einer Studie der folgenden detaillierten Beschreibung zu den Patentansprüchen und -zeichnungen offenbar, die alle Teil dieser Spezifikation sind. Die Zeichnungen umfassen Folgendes:
  • 1 ist ein Blockdiagramm, das ein Beispielsystem für die Erweiterung der semantischen Informationen darstellt, die für Quellcode generiert werden und die Informationen über integrierte Programmiersprachen beinhalten, die im Quellcode enthalten sind, gemäß einer oder mehrerer der hierin beschriebenen Ausführungsformen.
  • 2 ist ein Blockdiagramm, das die Knoten und Kanten eines Beispiels eines bestehenden semantischen Graphen darstellt.
  • 3 ist ein Blockdiagramm, das die Beispielknoten und -kanten in einem erweiterten semantischen Graph gemäß einer oder mehrerer hierin beschriebener Ausführungsformen darstellt.
  • 4 ist ein Blockdiagramm, das ein Beispielverfahren für die Erweiterung der semantischen Informationen darstellt, die für Quellcode generiert werden und die Informationen über integrierte Programmiersprachen beinhalten, die im Quellcode enthalten sind, gemäß einer oder mehrerer der hierin beschriebenen Ausführungsformen.
  • 5 ist ein Blockdiagramm, das ein Beispielcomputergerät für die Erweiterung der semantischen Informationen darstellt, die für Quellcode generiert werden, die Informationen über integrierte Programmiersprachen beinhalten, die im Quellcode enthalten sind, gemäß einer oder mehrerer der hierin beschriebenen Ausführungsformen.
  • Die hierin bereitgestellten Titel dienen lediglich der Übersichtlichkeit und haben nicht notwendigerweise einen Einfluss auf den Umfang oder die Bedeutung des Patentanspruchs der vorliegenden Offenbarung.
  • In den Zeichnungen werden aus Gründen der Verständlichkeit und Übersichtlichkeit dieselben Bezugszeichen und Abkürzungen verwendet, um Elemente oder Handlungen mit derselben oder ähnlicher Struktur oder Funktionalität zu kennzeichnen. Die Zeichnungen werden im Detail im Verlauf der folgenden detaillierten Beschreibung beschrieben.
  • DETAILLIERTE BESCHREIBUNG
  • Die folgende Beschreibung enthält verschiedene Beispiele und Ausführungsformen der Verfahren und Systeme der vorliegenden Offenbarung. Die folgende Beschreibung bietet spezifische Details für ein vollständiges Verständnis und ermöglicht die Beschreibung dieser Beispiele. Jemand, der in der entsprechenden Kunst erfahren ist, wird jedoch verstehen, dass ein oder mehrere hierin beschriebenen Ausführungsformen ohne viele dieser Details angewandt werden können. Ebenso wird jemand, der in der entsprechenden Kunst erfahren ist, auch verstehen, dass ein oder mehrere Ausführungsformen der vorliegenden Offenbarung andere Eigenschaften umfassen können, die nicht im Detail hierin beschrieben werden. Zudem können einige wohlbekannte Strukturen oder Funktionen nachfolgend nicht im Detail gezeigt oder beschrieben werden, um in der entsprechenden Beschreibung nicht für eine unnötige Verwirrung zu sorgen.
  • Nach vorhandenen Ansätzen werden längere Codeausschnitte vom Benutzer normalerweise in Textform nachgesehen und überprüft. Manche integrierte Entwicklungsumgebungen (oder interaktive Entwicklungsumgebungen) (IDEs) erlauben es dem Benutzer, aufgrund der Kenntnis der Codesemantik durch Code zu navigieren. Dieser Ansatz ist jedoch nicht für alle Code-Datenbanken einfach skalierbar (wie für große Code-Datenbanken), die manche Einheiten pflegen. Manche Code-Datenbanken können z. B. eine Größe erreichen, dass die Verwendung einer IDE zur Suche von Code unpraktisch (oder sogar unmöglich) ist. Ohne den hierin beschriebenen Dienst kann eine IDE ein Client des hierin beschriebenen Systems/Dienstes sein.
  • Entsprechend sind die Verfahren und Systeme der vorliegenden Offenbarung dazu ausgelegt, diese großen Code-Datenbanken in Textform verständlich zu machen, damit sie leichter und effizienter navigierbar sind. Gemäß einer oder mehrerer der hierin beschriebenen Ausführungsformen kann der Benutzer z. B. zur Position im Code springen, an der die Methode definiert ist, wobei ein Benutzer sieht, dass eine Methode aufgerufen wird. In ähnlicher Weise können diese Informationen dem Benutzer bereitgestellt werden, ohne dass dieser die gesamte Code-Datenbank durchsuchen muss, wenn der Benutzer alle Positionen innerhalb des Codes sehen möchte, in denen eine bestimmte Methode aufgerufen wird.
  • Wie oben beschrieben verwenden Entwickler häufig in die Programmiersprachen integrierte plattformunabhängige Programmiersprachen für bestimmte domänenspezifischen Probleme, da plattformunabhängige Programmiersprachen (wie C++, Java usw.) manchmal nicht ausdrucksstark genug oder zu umständlich sind. Entwickler können z. B. integrierte domänenspezifische Sprachen (auch EDSL genannt) verwenden, um die oben genannten potenziellen Probleme bezüglich der plattformunabhängigen Sprachen zu vermeiden. Im Fall von EDSL wird auf die domänenspezifische Sprache als Bibliothek von der plattformunabhängigen Programmiersprache zugegriffen (in noch spezifischeren Fällen kann die plattformunabhängige Programmiersprache auch eine spezielle Syntax bereitstellen, um zur integrierten Sprache zu wechseln). Ein Beispiel dieser EDSL sind Formatzeichenketten, bei denen mithilfe spezieller Markierungen und einem Satz von Argumenten längere Zeichenketten gebildet werden, anstatt dass der Entwickler Verkettungen verwendet, um die längere Zeichenkette zu bilden. Zu den Vorteilen der Verwendung dieses Musters gehören Lesbarkeit, Leistungsoptimierung, bessere Lokalisierbarkeit und die Fähigkeit, eine statische Analyse der integrierten Sprache durchzuführen. Andere Beispiele integrierter Programmiersprachen beinhalten C# LINQ, reguläre Ausdrücke usw.
  • Viele bestehenden Analysen zum Aufrufen semantischer Informationen über große Code-Datenbanken wurden jedoch für plattformunabhängige Programmiersprachen geschrieben und nicht für integrierte Programmiersprachen. In dem Moment, in dem ein Benutzer von einer plattformunabhängigen Programmiersprache zu einer der integrierten Programmiersprachen wechselt, die häufig als Zeichenketten kodiert sind, stellen die Analysen von daher nicht mehr die gewünschten semantischen Informationen über den Code bereit.
  • Angesichts des vorstehenden Problems sind die hierin beschriebenen Verfahren und Systeme dazu ausgelegt, einem Benutzer (z. B. einem Entwickler) dabei zu helfen, zu erkennen, wann Code von einer plattformunabhängigen Programmiersprache mit einer integrierten Programmiersprache interagiert, dem Benutzer verständlich zu machen, wie die Grenze zwischen den Sprachen überschritten wird und den Code so darzustellen, dass der Benutzer ihn leichter verstehen kann, wenn er ihn ansieht.
  • Insbesondere betreffen Ausführungsformen der vorliegenden Offenbarung die Verfahren und System zur Erweiterung der semantischen Informationen, die für Quellcode generiert werden und die Informationen über integrierte Programmiersprachen beinhalten, die im Quellcode enthalten sind.
  • IDEs beinhalten normalerweise verschiedene Funktionalitäten (z. B. zur-Definitionspringen, Verweise suchen, betreffenden Code markieren usw.), die es Entwicklern erlauben, zu navigieren und den Quellcode zu verstehen. Diese Funktionalitäten werden häufig durch Betreiben der Compilers der plattformunabhängigen Programmiersprache in einem Spezialmodus implementiert, wobei die Informationen durch die IDE vom Compiler extrahiert werden können. Da der Compiler lediglich die plattformunabhängige Programmiersprache kennt, ist dieser nicht in der Lage, einen Zusammenhang zwischen der plattformunabhängigen Programmiersprache und jeglicher im Code verwendeter integrierter Programmiersprache herzustellen. Im Fall des Zeichenkettenformatierers sind die Funktionen zur-Definitionspringen, Verweise suchen oder Code markieren zwischen der Formatierermarkierung und den Variablen von der plattformunabhängigen Programmiersprache nicht möglich.
  • Der folgende Fall soll als Beispiel dienen:
    String what = ”demoing”;
    String longString = String.format („Lange Zeichenkette für %s zum Zweck des vorliegenden Beispiels”, what);
  • Im obigen Beispiel hätte ein Entwickler die folgenden Optionen: (1) auf jump-to-def auf dem 'what'-Argument zum Aufruf der Methode String.format klicken und zur Variablendeklaration 'what' springen; (2) auf der Variablendeklaration auf dem 'what'-String nach Querverweisen und nach dem Argument zu String.format suchen; oder (3) den Mauszeiger über eine der Anwendungen/Deklarationen von 'what' bewegen und die anderen zugehörigen Positionen im Code anzeigen.
  • Ohne die Verfahren und Systeme der vorliegenden Offenbarung wäre der Entwickler jedoch nicht in der Lage, die Anwendung und/oder das Verhältnis von '%s' im Formatstring anzuzeigen.
  • Während mit einigen bestehenden statischen Analysen wie der Cross-Site-Scripting-Analyse und der Analyse von SQL-Injection-Angriffen z. B. versucht wird, die Lücke zwischen domänenspezifischen Sprachen und plattformunabhängigen Sprachen zu füllen, fehlt diesen bestehenden Ansätzen die semantische Navigationsfunktionalität der Verfahren und Systeme der vorliegenden Offenbarung.
  • Wie hier noch weiter beschrieben werden wird nutzen die Verfahren und Systeme der vorliegenden Offenbarung ein semantisches Modell mit Informationen, die es einem Entwickler erlauben, zwischen EDSL-Konstrukten und den Konstrukten der plattformunabhängigen Sprache zu navigieren, die die EDSL-Instanz umgibt.
  • 1 stellt ein Beispielsystem 100 zur Erweiterung semantischer Informationen dar, die für Quellcode generiert werden und die Informationen über integrierte Programmiersprachen beinhalten, die im Quellcode enthalten sind. Gemäß mindestens einer Ausführungsform können die EDSL-Konstrukte, die Konstrukte in der plattformunabhängigen Sprache, die die EDSL-Instanz umgeben und das Verhältnis zwischen ihnen als semantischer Graph 140 bestehend aus Knoten 150 und Kanten 160 modelliert werden. Die Knoten 150 in Graph 140 können z. B. als eine besondere Art von Quellkonstrukt (z. B. als ein Typ, eine Methode, eine Variable, ein Literal usw.) repräsentiert werden und die Kanten 160 können das Verhältnis zwischen diesen Knoten 150 (z. B. ist ein Stück Code ein Methodenaufruf von einer Methode zur anderen, eine bestimmte Klasse implementiert eine bestimmte Schnittstelle usw.) modellieren.
  • Gemäß mindestens einer Ausführungsform kann der semantische Graph 140 durch Bereitstellung von Werkzeugen für den Analysator 120 erstellt werden, der die semantischen Informationen aus dem Quellcode 110 extrahiert. Der Analysator 120 kann z. B. so konfiguriert werden, dass die semantischen Informationen extrahiert werden, indem der Compiler für eine bestimmte beteiligte Programmiersprache ausgeführt wird und die internen Details vom Compiler extrahiert werden, um die Teile (z. B. die Knoten 150 und Kanten 160) des Graphen 140 zu erstellen.
  • Gemäß einer oder mehrerer Ausführungsformen der vorliegenden Offenbarung kann der Graph 140, der für den Quellcode 110 erstellt (z. B. konstruiert, generiert usw.) werden kann, auf Informationen des Compilers 115 (z. B. dem Parser, dem abstrakten Syntaxbaum (AST), der Symboltabelle usw. (nicht in 1 dargestellt)) basieren. Der Graph 140 kann aus Knoten 150 und Kanten 160 bestehen, wobei sich die Knoten 150 auf Stücke des Quellcodes 110 (z. B. auf einen Methodencode, eine Methodendefinition und ähnliches) beziehen können und die Kanten 160 das Verhältnis zwischen den Stücken des Quellcodes 110 bezeichnen. Der Graph 140, der für Quellcode 110 erstellt werden kann, ist nicht sprachenspezifisch, sondern ist in der Lage, alle möglichen plattformunabhängigen Programmiersprachen zu modellieren, die in dem Code 110 verwendet werden.
  • Durch die Verfahren und Systeme der vorliegenden Offenbarung wird der Graph 140 nicht nur auf Informationen über plattformunabhängige Programmiersprachen erweitert, sondern auch auf Informationen über verschiedene integrierte Programmiersprachen (z. B. domänenspezifische Programmiersprachen), die im Quellcode 110 vorkommen können. Der Graph 140 kann z. B. erweitert werden, indem Kanten 160 (z. B. Verhältnisse) zwischen den Stücken des Codes 110 (z. B. Knoten 150) hinzugefügt werden, die in einer integrierten Programmiersprache sind, und den Stücken des Codes 110 (z. B. Knoten 150), die in einer plattformunabhängigen Programmiersprache sind. Durch Hinzufügen der spezifischen Knoten 150 für die integrierten Sprachstücke des Codes 110 und Hinzufügen von Kanten 160 für das Verhältnis zwischen diesen integrierten Sprachstücken und den plattformunabhängigen Sprachstücken des Codes 110 können, wenn der Compiler 115 am Quellcode 110 arbeitet, diese integrierten Sprachstücke erkannt und spezieller Code ausgeführt werden, sodass die Knoten 150 und Kanten 160 an den Graphen 140 abgegeben werden.
  • Obwohl die Erstellung der Knoten 150 und Kanten 160 für integrierte Programmiersprachen im Zusammenhang mit String-Formatierern beschrieben wird, sollte darauf hingewiesen werden, dass diese Knoten und Kanten auch für jegliche Mischung aus anderen integrierten Programmiersprachen erstellt werden können, die im Quellcode 110 verwendet werden können. Für jede dieser anderen integrierten Programmiersprachen kann entweder eine sehr spezifische Art von Knoten und Kanten zum Zweck der Modellierung erstellt werden (z. B. in einem semantischen Graph wie dem Graphen 140) oder es kann eine eher allgemeine oder generische Kombination von Knoten und Kanten zum Modellieren erstellt werden. Die Entscheidung, eine eher sehr spezifische Art von Knoten und Kanten für eine gegebene integrierte Sprache zu erstellen oder eine eher allgemeine Art von Knoten und Kanten, kann darauf beruhen, ob der Benutzer die Möglichkeit besitzen möchte, Knoten und Kanten für andere integrierte Sprachen zu abstrahieren.
  • Um Daten über EDSL in der plattformunabhängigen Sprache abzurufen, für die der Analysator 120 geschrieben ist, kann eine EDSL-Erweiterung 130 zum Analysator 120 hinzugefügt werden. Gemäß mindestens einer Ausführungsform kann die EDSL-Erweiterung 130 fest in diese Werkzeuge eingebaut sein, während gemäß einer oder mehrerer anderer Ausführungsformen die EDSL-Erweiterung 130 über eine Plug-in-Schicht eingebaut oder als völlig separater Prozess oder Dienst ausgeführt werden kann.
  • Die EDSL-Erweiterung 130 wirkt als Analysator der im Quellcode 110 enthaltenen EDSL insofern, als die EDSL-Erweiterung 130 die Semantik dieser bestimmten Sprache versteht. Die EDSL-Erweiterung 130 kann diese Semantik mithilfe von etablierten Kanälen (die auch für den Analysator plattformunabhängiger Sprachen 120 verwendet werden können, zu der die Erweiterung 130 gehört) an das allgemeine Framework senden (z. B. generieren, produzieren, ausgeben, bereitstellen usw.), um semantische Informationen bereitzustellen. Abhängig von der bestimmten Implementierung können die von der Erweiterung 130 erstellten semantischen Daten direkt an den Benutzer ausgegeben, weiter verarbeitet oder (z. B. auf einer Diskette) gespeichert werden.
  • Die EDSL-Erweiterung 130 kann semantische Informationen über die EDSL entweder markiert mit normalen Arten (z. B. knotenartige VARIABLE, kantenartige REFERENCE/REFERENCED_BY usw.) senden oder die Erweiterung 130 könnte so konfiguriert werden, dass eindeutige Arten dieser Werkzeuge gesendet werden, sodass die Werkzeuge, die die semantischen Informationen abrufen, spezielle Maßnahmen gegen EDSL-Konstrukte ergreifen können. Einige nichtbegrenzende Beispiele dieser eindeutigen Arten beinhalten Knotenart STRING_FORMAT_VARIABLE (im Beispiel eines semantischen Graphen 300 in 3 mit 310 gekennzeichnet, wie in größeren Einzelheiten nachstehend beschrieben), Kantenart STRING_FORMAT_VARIABLE_REFERENCE/REFERENCED_BY_STRING_FORMAT_VARIABLE (im Beispiel eines semantischen Graphen 300 in 3 mit 320 gekennzeichnet) usw.
  • Wie oben beschrieben, können die Knoten umfassend den semantischen Graphen der vorliegenden Offenbarung (z. B. die Knoten 150 im Graphen 140 des Beispielsystems 100 dargestellt in 1) Positionen oder Abstraktionen im Quellcode repräsentieren, während die Kanten des Graphen (z. B. die Kanten 160 im Graphen 140 des Beispielsystems 100 dargestellt in 1) das Verhältnis zwischen diesen Positionen/Abstraktionen repräsentieren können.
  • 2 stellt ein Beispiel eines bestehenden semantischen Graphen 200 dar, wobei alle Knoten und Kanten sich auf Positionen in der plattformunabhängigen Programmiersprache beziehen.
  • 3 stellt ein Beispiel eines semantischen Graphen 300 gemäß einer oder mehrerer Ausführungsformen der vorliegenden Offenbarung dar. Im Vergleich zu bestehenden semantischen Graphen (z. B. dem Graphen 200 dargestellt in 2) besitzt der semantische Beispielgraph 300 zusätzliche Knoten und Kanten, die Positionen in der EDSL repräsentieren, sowie zusätzliche Kanten als Brücke zwischen der EDSL und der plattformunabhängigen Programmiersprache.
  • Wenn der Analysator 120 der plattformunabhängigen Sprache die EDSL-Erweiterung 130 aufruft, kann der Analysator 120 der plattformunabhängigen Sprache der Erweiterung 130 genügend Informationen bereitstellen, um das EDSL-Konstrukt auf die Konstrukte von der plattformunabhängigen Sprache zurückzuführen, die für die EDSL-Instanz relevant sind. Einige nichtlimitierende und nichterschöpfende Beispiele dieser Konstrukte von der plattformunabhängigen Sprache sind:
    Argumente: Literale, Ausdrücke, Variablen;
    Instanz, auf der die EDSL-Methode aufgerufen wird; und
    Umfang, in dem der Aufruf erfolgt.
  • Die EDSL-Erweiterung 130 muss über die plattformunabhängige Sprache informiert werden, sodass die Erweiterung 130 in der Lage ist, die Lücke zwischen der plattformunabhängigen Sprache und den integrierten Sprachen zu füllen und die Kanten 160 zwischen den Knoten 150 im Graphen 140 zu senden. Je mehr Daten der Analysator 120 der plattformunabhängigen Sprache der Erweiterung 130 über die plattformunabhängige Sprache bereitstellen kann, desto besser ist die Erweiterung 130 in der Lage, das unterschiedliche Verhältnis zwischen Stücken des Codes 110 (z. B. Knoten 150) zu bestimmten, die sich in der plattformunabhängigen Sprache befinden und den Stücken des Codes 110 (z. B., Knoten 150), die sich in der integrierten Sprache befinden und entsprechend Kanten 160 zu senden.
  • Gemäß einer oder mehrerer hierin beschriebener Ausführungsformen können Informationen über plattformunabhängige Programmiersprachen der EDSL-Erweiterung 130 auf viele verschiedene Arten bereitgestellt werden.
  • Gemäß einer oder mehrerer Ausführungsformen der vorliegenden Offenbarung kann der Analysator 120 der plattformunabhängigen Sprache irgendeine einer Vielzahl von Strategien oder Prozessen verwenden, um der EDSL-Erweiterung 130 Daten über plattformunabhängige Programmiersprachen bereitzustellen. Der Analysator 120 kann die Daten an die Erweiterung 130 z. B. bereitstellen durch: (i) Analyse des abstrakten Syntaxbaums (AST) der Konstrukt-Aufrufs der EDSL; (ii) Verwendung von Heuristik zur Zuordnung (Mapping) der Argumente zu anderen Positionen im AST der plattformunabhängigen Sprache; (iii) Verwendung von Kontrollfluss-/Datenflussanalyse (z. B. um die Reihenfolge zu bestimmten, in der einzelne Aussagen, Befehle, Funktionsaufrufe usw. eines Programms ausgeführt oder ausgewertet werden); (iv) Verwendung der Ergebnisse früherer dynamischer Programmanalysen (z. B. durchgeführt durch Ausführung von Programmen auf einem echten oder virtuellen Prozessor); und/oder (v) Verwendung von Technologien wie Maschinenlernen, um das Verhältnis zwischen den beiden Sprachen zu bestimmen.
  • Gemäß einer oder mehrerer Ausführungsformen kann der Analysator 120 die Daten über die plattformunabhängige Programmiersprache verwenden, um Kanten zu senden, die sich zwischen Knoten von der EDSL und Knoten von der plattformunabhängigen Sprache kreuzen (z. B. die Kanten 160, die sich zwischen den Knoten 150 im Graphen 140 im Beispielsystem 100 dargestellt in 1 kreuzen).
  • Da der Analysator 120 als eine Erweiterung ausgeführt wird, sollte der Analysator 120 normalerweise die Adresse (z. B. den Namen) des Knoten von der plattformunabhängigen Programmiersprache kennen. In Situationen, in denen der Analysator 120 jedoch nicht fähig ist, Zugang zu den Datenstrukturen der plattformunabhängigen Programmiersprache zu erhalten (z. B. bei Ausführung in einem anderen Prozess oder da die Programmierschnittstelle API dies nicht erlaubt), können die folgenden Beispielalternativen verwendet werden, um die Knoten von der plattformunabhängigen Programmiersprache zu adressieren:
    • (1) Der Analysator 120 der plattformunabhängigen Sprache kann so konfiguriert sein, dass genügend Daten bereitgestellt werden, um den Knoten eindeutig zu benennen; oder
    • (2) Der EDSL-Analysator kann so konfiguriert sein, dass die Benennung des Knoten aufseiten der plattformunabhängigen Sprache weniger präzise ist (was immer noch zu nützlichen Daten führt, nur ggf. etwas weniger präzise). Angenommen, es gibt einen Knoten in der plattformunabhängigen Programmierung mit einem eindeutigen Namen, aber die Erweiterung kennt diesen eindeutigen Namen nicht. Gemäß einer oder mehrerer hierin beschriebener Ausführungsformen kann der Analysator der plattformunabhängigen Sprache (z. B. Analysator 120 der plattformunabhängigen Sprache) einen zusätzlichen Knoten mit einem nichteindeutigen Namen senden (da der Namen nicht eindeutig ist, dann er mehrmals gesendet werden) und einen Kantensatz zwischen den Knoten mit den eindeutigen Namen und den nichteindeutigen Name, (z. B. HAS_PARTIAL_NAME/PARTIAL_NAME_OF). Die Erweiterung kann dann eine Kante zu diesem nichteindeutigen Knoten senden. Der Benutzer des Graphen kann den Satz von Knoten mit den eindeutigen Namen auflösen, indem er die Kanten vom nichteindeutigen Knoten aufsucht.
  • Nachdem der Analysator 120 der plattformunabhängigen Sprache und die EDSL-Erweiterung 130 ihre Operationen abgeschlossen haben, können die Daten wie jeder andere Teil des Index aufgebaut sein und die restlichen Werkzeuge können wie normal eingebaut werden. Gemäß mindestens einer Ausführungsform der vorliegenden Offenbarung, wobei die Werkzeuge die Verfügbarkeit von Informationen über die Verbindung zwischen der EDSL- und der plattformunabhängigen Sprache nutzen möchten (z. B. in Fällen, in denen speziell gekennzeichnete Knoten und Kanten über die EDSL-Erweiterung gesendet wurden (z. B. über die EDSL-Erweiterung 130 im Beispielsystem 100 dargestellt in 1)), gibt es jedoch zahlreiche Wege, in denen der Rest der Werkzeuge davon profitieren könnte. Eine zusätzliche Verarbeitung kann z. B. beim Aufbau der Indizierung erfolgen, dem Benutzer können über eine Benutzerschnittstelle spezielle Anzeigen bereitgestellt werden usw.
  • Es ist anzumerken, dass eine oder mehrere Ausführungsformen der vorliegenden Offenbarung eine Programmierschnittstelle (API) beinhalten können oder eine solche im Zusammenhang damit implementiert werden kann, die dem Benutzer erlaubt, die mithilfe der hierin beschriebenen Verfahren und Systeme erfasste Daten abzurufen. Ein Webservice kann z. B. einem Benutzer den Zugang (dabei kann es sich um direkten oder sofortigen Zugang handeln) zu den von einem oder mehreren Compiler gesammelten Daten bereitstellen, die so konfiguriert sind, dass sie die hierin beschriebenen Verfahren ausführen. Im Einklang mit einer oder mehreren Ausführungsformen kann ein Benutzer ein Tool (z. B. einen Webbrowser) verwenden, das ihm erlaubt, seinen Quellcode zusammen mit Links zu sehen, die mit einem oder mehreren Servern interagieren, auf denen die hier beschriebenen Verfahren und Systeme implementiert werden können.
  • Es ist ebenso impliziert, dass die aufgrund der hierin beschriebenen Verfahren und Systeme erstellten Daten dem Benutzer auf vielfache Weise bereitgestellt werden kann. Im Einklang mit mindestens einer Ausführungsform können die Daten auf einem Benutzerschnittstellen-Bildschirm angezeigt werden, auf den der Benutzer zugreifen kann, wo die Daten auf diesem Bildschirm hervorgehoben werden können, um sie leichter zu erkennen und zu interpretieren. Im Einklang mit einer oder mehreren weiteren Ausführungsformen können die Daten dem Benutzer über eine Befehlszeile zur Verfügung gestellt werden, oder durch eine interaktive Entwicklungsumgebung (IDE), oder durch andere zur Verfügung stehende Methoden.
  • 4 stellt einen Beispielprozess zur Erweiterung semantischer Informationen dar, die für Quellcode generiert werden und die Informationen über integrierte Programmiersprachen beinhalten, die im Quellcode enthalten sind. Gemäß einer oder mehrerer hierin beschriebener Ausführungsformen kann der Beispielprozess 400 über ein System ausgeführt werden, dass dem oben beschriebenen System 100 ähnlich ist und dargestellt ist in 1.
  • In Block 405 kann die plattformunabhängige Programmiersprache in einer Quelldatei mithilfe eines Analysators der plattformunabhängigen Programmierung (z. B. die plattformunabhängige Programmiersprache in Quelldatei 110 kann mithilfe des Analysators 120 der plattformunabhängigen Sprache im Beispielsystem 100 dargestellt in 1 analysiert werden), wobei der Analysator der plattformunabhängigen Programmierung eine Erweiterung zur Analyse der integrierten Programmiersprachen beinhaltet (z. B. die EDSL-Erweiterung 130 im Beispielsystem 100 dargestellt in 1).
  • In Block 410 kann, als Reaktion auf das Erkennen einer integrierte Programmiersprache in der Quelldatei, die Erweiterung zur Analyse integrierter Programmiersprachen (das Teil des Analysators der plattformunabhängigen Programmierung ist) aufgerufen werden.
  • In Block 415 können Daten über die plattformunabhängige Programmiersprache, die in Block 405 analysiert wurden (z. B. durch den Analysator plattformunabhängiger Programmierung) an die Erweiterung zur Analyse der integrierten Programmiersprachen bereitgestellt werden. Gemäß mindestens einer Ausführungsform der vorliegenden Offenbarung können die Daten über die plattformunabhängige Programmiersprache, die der Erweiterung zur Analyse der integrierten Programmiersprachen (in Block 415) bereitgestellt wurden, Informationen beinhalten, die ein Konstrukt der integrierten Programmiersprache den Konstrukten von der plattformunabhängigen Programmiersprache zuweisen, die für diese Instanz (z. B. bei Block 410) der Erweiterung zur Analyse der integrierten Programmiersprache relevant sind. Die Konstrukte von der plattformunabhängigen Programmiersprache können z. B. eines oder mehrere der Folgenden beinhalten: Argumente, Instanzen, auf denen die integrierte Programmiersprache aufgerufen wird, und den Umfang der Instanzen, auf denen die integrierte Programmiersprache aufgerufen wird.
  • Gemäß mindestens einer Ausführungsform können die Daten über die plattformunabhängige Programmiersprache der Erweiterung zur Analyse der integrierten Programmiersprachen (in Block 415) durch den Analysator plattformunabhängiger Programmierung bereitgestellt werden. Je nach Implementierung kann der Analysator plattformunabhängiger Programmierung die Daten über die plattformunabhängige Programmiersprache an die Erweiterung zur Analyse der integrierten Programmiersprachen bereitstellen durch (i) Analyse eines abstrakten Syntaxbaums eines Konstruktes, das die Erweiterung zur Analyse der integrierten Programmiersprachen aufruft; (ii) Verwendung von Heuristik zur Zuordnung (Mapping) der Argumente der plattformunabhängigen Programmiersprache zu anderen Positionen in einem abstrakten Syntaxbaum der plattformunabhängigen Sprache; (iii) Verwendung von Kontrollfluss-/Datenflussanalyse für die plattformunabhängige Programmiersprache; (iv) Durchführung einer dynamischen Programmanalyse für die plattformunabhängige Programmiersprache; oder (v) Verwendung von Maschinenlernen, um das Verhältnis zwischen der plattformunabhängigen Programmiersprache und der integrierten Programmiersprache zu bestimmen.
  • In Block 420 können semantische Informationen über die integrierte Programmiersprache und die plattformunabhängige Programmiersprache generiert werden, wobei Teile der Quelldatei, die sich in der integrierten Programmiersprache befinden, Teilen der Quelldatei, die sich in der plattformunabhängigen Programmiersprache befinden, über die semantischen Informationen zugewiesen werden.
  • Gemäß einer oder mehrerer Ausführungsformen der vorliegenden Offenbarung kann der Beispielprozess 400 zur Erweiterung semantischer Informationen, die für Quellcode generiert werden, eine oder mehrere Operationen (nicht dargestellt) zusätzlich zu oder anstelle der oben hinsichtlich der Blöcke 405420 beschriebenen Beispieloperationen beinhalten.
  • Gemäß mindestens einer Ausführungsform kann z. B. können die semantischen Informationen über die integrierte Programmiersprache und die plattformunabhängige Programmiersprache (z. B. in Block 420 generiert) zu einem für die integrierte Programmiersprache und die plattformunabhängige Programmiersprache erstellten Modell hinzugefügt werden. Bei diesem Modell kann es sich z. B. um einen semantischen Graphen (z. B. um den semantischen Graphen 140 im Beispielsystem 100 dargestellt in 1) handeln und die semantischen Informationen über die integrierte Programmiersprache und die plattformunabhängige Programmiersprache können als Knoten und Kanten zum Graphen hinzugefügt werden. Die zum Graphen hinzugefügten Knoten können Knoten von der integrierten Programmiersprache und Knoten von der plattformunabhängigen Programmiersprache beinhalten und die zum Graphen hinzugefügten Kanten können zwischen Knoten von der integrierten Programmiersprache und Knoten von der plattformunabhängigen Programmiersprache wechseln.
  • 5 ist ein Übersichts-Blockdiagramm eines Beispielcomputers (500), der für die Bereitstellung erweiterter semantischer Informationen über den Quellcode vorbereitet wurde, einschließlich Informationen über integrierte Programmiersprachen, die im Quellcode enthalten sind, gemäß einer oder mehrerer der hierin beschriebenen Ausführungsformen. In einer sehr grundlegenden Konfiguration (501), schließt das Rechengerät (500) für gewöhnlich eine oder mehrere Prozessoren (510) und Systemspeicher ein (520). Ein Speicher-Bus (530) kann für die Kommunikation zwischen dem Prozessor (510) und dem Systemspeicher (520) verwendet werden.
  • Abhängig von der gewünschten Konfiguration kann der Prozessor (510) aus einem beliebigen Typ bestehen wie Mikroprozessor (μP), Mikrocontroller (μC), digitaler Signalprozessor (DSP) oder einer beliebigen Kombination dieser Prozessortypen. Der Prozessor (510) kann ein oder mehr Cache-Ebenen einschließen, wie z. B. ein Cache der Ebene Eins (511) und ein Cache der Ebene Zwei (512), einen Prozessorkern (513) und Register (514). Der Prozessorkern (513) kann eine arithmetisch-logische Einheit (ALU), eine Gleitpunkt-Maßeinheit (FPU), einen digitalen Signalverarbeitungskern (DSP Core) oder jede mögliche Kombination davon umfassen. Eine Speichersteuerung (516) kann ebenfalls mit dem Prozessor (510) verwendet werden, oder in einigen Implementierungen kann die Speichersteuerung (515) ein internes Teil des Prozessors (510) sein.
  • Abhängig von der gewünschten Konfiguration kann der Systemspeicher (520) ein beliebiger Typ sein einschließlich flüchtiger Speicher (wie RAM), nichtflüchtiger Speicher (wie ROM, Flashspeicher etc.) oder eine beliebige Kombination dieser Typen. Systemspeicher (520) umfasst üblicherweise ein Betriebssystem (521), ein oder mehrere Anwendungen (522) und Programmdaten (524). Die Anwendung (522) kann ein System zur Erweiterung semantischer Informationen über EDSL (523) beinhalten, das so konfiguriert sein kann, dass ein Benutzer dabei unterstützt wird, zu bestimmten, wo Stücke des Quellcodes, die eine plattformunabhängige Programmiersprache enthalten, mit Stücken des Code, die eine integrierte Programmiersprache enthalten, interagieren. Das System (523) kann auch so konfiguriert sein, dass dem Benutzer verständlich gemacht wird, wie die Grenze zwischen den Sprachen überschritten wird und den Code so darzustellen, dass der Benutzer ihn leichter verstehen kann.
  • Programmdaten (524) können Speicheranweisungen enthalten, die bei Ausführung durch ein oder mehrere Verarbeitungsgeräte ein System (523) und eine Methode zur Erweiterung semantischer Informationen implementieren, die für Quellcode generiert werden und die Informationen über integrierte Programmiersprachen beinhalten, die im Quellcode enthalten sind. Zusätzlich können gemäß mindestens einer Ausführungsform die Programmdaten (524) Daten (525) über plattformunabhängige Programmiersprachen enthalten, die sich auf die Daten über eine plattformunabhängige Sprache beziehen können, die eine EDSL-Erweiterung (z. B. die EDSL-Erweiterung 130 im Beispielsystem 100 dargestellt in 1) benötigen kann, um die Lücke zwischen der plattformunabhängigen Sprache und einer oder mehreren im Quellcode enthaltenen integrierten Sprachen zu füllen und semantische Informationen über die Interaktion zwischen den beiden Sprachen zu generieren. In Übereinstimmung mit mindestens einigen Ausführungsformen kann die Anwendung (522) so angeordnet werden, um mit Programmdaten (524) oder einem Betriebssystem (521) zu funktionieren.
  • Das Computergerät (500) kann zusätzliche Merkmale oder Funktionalitäten besitzen sowie zusätzliche Schnittstellen für die Kommunikation zwischen der Basiskonfiguration (501) und allen erforderlichen Geräten und Schnittstellen.
  • Der Systemspeicher (520) ist ein Beispiel eines Computerspeichermediums. Ein Computerspeichermedium umfasst, ist aber nicht darauf begrenzt, RAM, ROM, EEPROM, Flash-Speicher oder andere Speichertechnologien, CD-ROM, Digital Versatile Disks (DVDs) oder andere optische Speicher, Magnetkassetten, Magnetbänder, magnetische Magnetplattenspeicher oder andere magnetische Speichervorrichtungen oder jedes andere Medium, das verwendet werden kann, um die gewünschten Informationen zu speichern und auf das über das Rechengerät 500 zugegriffen werden kann. Jedes derartige Computerspeichermedium kann ein Teil des Geräts (500) sein.
  • Das Computergerät (500) kann als Teil eines kleinformatigen tragbaren (oder mobilen) elektronischen Geräts wie einem Mobiltelefon, Smart Phone, Personal Data Assistant (PDA), Personal Media Player, Tabletcomputer (Tablet), schnurlosen mobilen Internetgerät, persönlichen Headset-Gerät, anwendungsspezifischen Gerät oder Hybridgerät implementiert werden, das beliebige der oben genannten Funktionen enthält. Das Rechengerät (500) kann auch als ein PC implementiert werden, einschließlich Laptopcomputer und Nicht-Laptopcomputerkonfigurationen.
  • In der vorhergehenden detaillierte Beschreibung wurden verschiedene Ausführungsformen der Geräte und/oder Prozesse mithilfe von Blockdiagrammen, Flussdiagrammen und/oder Beispielen dargelegt. Insoweit wie solche Blockdiagramme, Flowcharts und/oder Beispiele eine oder mehrere Funktionen und/oder Operationen beinhalten, werden sie verstanden von denen in der Wissenschaft, das jede Funktion und/oder Operation mit solchen Blockdiagrammen, Flowcharts oder Beispielen implementiert werden können, individuell und/oder kollektiv, durch ein weites Angebot von Hardware, Software, Firmware der irgendeiner virtuellen Kombination davon. In Übereinstimmung mit mindestens einer Ausführungsform können mehrere Teile des betreffenden Gegenstands, das hierin beschrieben wird, über Application Specific Integrated Circuits (ASICs), Field Programmable Gate Arrays (FPGAs), digitale Signalprozessoren (DSPs) oder andere integrierte Formate eingeführt werden. Dennoch werden die Fachkundigen feststellen, dass einige Aspekte der hier dargelegten Ausführungen, teilweise oder gänzlich, ebenso in integrierten Kreisläufen implementiert werden können, als ein oder mehrere Computerprogramme, die auf einem oder mehreren Computer ausgeführt werden, als ein oder mehrere Programme, die auf einem oder mehreren Prozessoren ausgeführt werden, als Firmware oder irgend eine Kombination davon; und dass ein Entwurf der Kreisläufe und/oder des Schreibens des Codes für die Software und/oder Firmware unter Berücksichtigung der vorliegenden Veröffentlichung eine große Leistung wäre. Außerdem werden Fachleute verstehen, dass die Mechanismen dieses hier beschriebenen Gegenstands in der Lage sind, als ein Programmprodukt in einer Vielzahl von Formen verteilt zu werden, und dass eine veranschaulichende Ausführungsform des hier beschriebenen Gegenstands unabhängig von der besonderen Art des nicht-flüchtigen signalführenden Mediums gilt, das für die tatsächliche Verteilung verwendet wird. Beispiele nichtflüchtiger Signalträgermedien sind unter anderem: beschreibbare Medien wie Floppy Disk, Harddisklaufwerk, Compact Disc (CD), Digital Video Disk (DVD), Digitalband, Computerspeicher etc.; und Übertragungsmedien wie digitale und/oder analoge Kommunikationsmedien (z. B. Glasfaserkabel, Wellenleiter, drahtgebundene Kommunikationsverbindungen, drahtlose Kommunikationsverbindungen etc.)
  • Bezüglich der Verwendung von im Wesentlichen beliebigen Plural- und/oder Singularausdrücken hierin kann der Fachmann von Plural zu Singular und/oder von Singular zu Plural übersetzen, wie dies für den Kontext und/oder die Anwendung angebracht ist. Die verschiedenen Singular-/Plural-Permutationen können hierin ausdrücklich aus Gründen der Klarheit dargelegt.
  • Es ist zudem anzumerken, dass in Situationen, in denen durch die hierin beschriebenen Systeme und Methoden personenbezogene Daten über den Benutzer gesammelt werden oder personenbezogene Daten genutzt werden, der Benutzer eine Gelegenheit enthalten kann, zu steuern, ob mit den Systemen und/oder Programmen zusammenhängende Systeme und/oder Methoden Benutzerinformationen sammeln (z. B. Informationen über die Einstellungen des Benutzers). Darüber hinaus können gewisse Daten auf eine oder mehrere Wege behandelt werden, bevor sie gespeichert oder verwendet werden, sodass Informationen zur Identifizierung von Personen entfernt werden.
  • Eine Identität eines Benutzers kann zum Beispiel so behandelt werden, dass keine personenbezogenen Informationen für den Benutzer bestimmt werden können. Deshalb kann der Benutzer darüber Kontrolle haben, wie die Benutzerinformationen gesammelt und durch einen Server benutzt werden.
  • Es wurden somit besondere Ausführungsformen des Gegenstandes beschrieben. Weitere Ausführungsformen gehören zum Umfang der folgenden Ansprüche. In einigen Fällen können die in den Ansprüchen beschriebenen Handlungen in einer anderen Reihenfolge ausgeführt werden und dennoch erwünschte Ergebnisse erzielen. Zusätzlich erfordern die in den beigefügten Figuren dargestellten Prozesse nicht notwendigerweise die bestimmte gezeigte Reihenfolge oder aufeinanderfolgende Reihenfolge, um erwünschte Ergebnisse zu erzielen. Bei bestimmten Implementierungen können Multitasking und eine Parallelbearbeitung vorteilhaft sein.

Claims (14)

  1. System, das Folgendes umfasst: einen oder mehrere Prozessor(en); und ein nicht transitorisches computerlesbares Medium, das gekoppelt ist mit dem einen oder den mehreren Prozessoren, die darin gespeicherte Anweisungen aufweisen, die, wenn sie durch den einen oder die mehreren Prozessoren ausgeführt werden, den einen oder die mehreren Prozessoren veranlassen, Operationen durchzuführen, umfassend: das Analysieren einer plattformunabhängigen Programmiersprache in einer Quelldatei (110) mithilfe eines Analysators plattformunabhängiger Programmierung (120), worin der Analysator plattformunabhängiger Programmierung eine Erweiterung (130) zur Analyse integrierter Programmiersprachen beinhaltet; als Reaktion auf das Erkennen einer integrierten Programmiersprache in der Quelldatei durch den Analysator plattformunabhängiger Programmierung das Aufrufen der Erweiterung zur Analyse der integrierten Programmiersprache; das Bereitstellen von Daten über die plattformunabhängige Programmiersprache an die Erweiterung zur Analyse der integrierten Programmiersprachen; und das Generieren von semantischen Informationen über die integrierte Programmiersprache und die plattformunabhängige Programmiersprache, worin Teile der Quelldatei, die sich in der integrierten Programmiersprache befinden, Teilen der Quelldatei, die sich in der plattformunabhängigen Programmiersprache befinden, über die semantischen Informationen zugewiesen werden.
  2. System nach Anspruch 1, wobei der eine oder die mehreren Prozessoren veranlasst werden, weitere Operationen durchzuführen, umfassend: das Hinzufügen der semantischen Informationen über die integrierte Programmiersprache und die plattformunabhängige Programmiersprache zu einem für die integrierte Programmiersprache und die plattformunabhängige Programmiersprache erstellten Modell.
  3. System nach Anspruch 2, worin die semantischen Informationen über die integrierte Programmiersprache und die plattformunabhängige Programmiersprache als Knoten (150) und Kanten (160) in einem Graphen (140) zum Modell hinzugefügt werden.
  4. System nach Anspruch 1, worin die Daten über die plattformunabhängige Programmiersprache, die der Erweiterung zur Analyse der integrierten Programmiersprachen bereitgestellt wurden, Informationen beinhalten, die ein Konstrukt der integrierten Programmiersprache den Konstrukten von der plattformunabhängigen Programmiersprache zuweisen, die für diese Instanz der Erweiterung zur Analyse der integrierten Programmiersprache relevant sind.
  5. System nach Anspruch 4, worin die Konstrukte von der plattformunabhängigen Programmiersprache eines oder mehrere der Folgenden beinhalten: Argumente, Instanzen, auf denen die integrierte Programmiersprache aufgerufen wird, und den Umfang der Instanzen, auf denen die integrierte Programmiersprache aufgerufen wird.
  6. System nach Anspruch 1, wobei der eine oder die mehreren Prozessoren veranlasst werden, weitere Operationen durchzuführen, umfassend: das Analysieren eines abstrakten Syntaxbaums eines Konstruktes, das die Erweiterung zur Analyse der integrierten Programmiersprachen aufruft; und das Bereitstellen von Daten über die plattformunabhängige Programmiersprache an die Erweiterung zur Analyse der integrierten Programmiersprachen aufgrund der Analyse des abstrakten Syntaxbaums.
  7. System nach Anspruch 1, wobei der eine oder die mehreren Prozessoren veranlasst werden, weitere Operationen durchzuführen, umfassend: das Verwenden von Heuristik zur Zuordnung (Mapping) der Argumente der plattformunabhängigen Programmiersprache zu anderen Positionen in einem abstrakten Syntaxbaum der plattformunabhängigen Sprache; und das Bereitstellen von Daten über die plattformunabhängige Programmiersprache an die Erweiterung zur Analyse der integrierten Programmiersprachen aufgrund der zugeordneten Argumente.
  8. System nach Anspruch 1, wobei der eine oder die mehreren Prozessoren veranlasst werden, weitere Operationen durchzuführen, umfassend: das Durchführen einer Kontrollflussanalyse für die plattformunabhängige Programmiersprache; und das Bereitstellen von Daten über die plattformunabhängige Programmiersprache an die Erweiterung zur Analyse der integrierten Programmiersprachen aufgrund der Kontrollflussanalyse.
  9. System nach Anspruch 1, wobei der eine oder die mehreren Prozessoren veranlasst werden, weitere Operationen durchzuführen, umfassend: das Durchführen einer dynamischen Programmanalyse für die plattformunabhängige Programmiersprache; und das Bereitstellen von Daten über die plattformunabhängige Programmiersprache an die Erweiterung zur Analyse der integrierten Programmiersprachen aufgrund der dynamischen Programmanalyse.
  10. System nach Anspruch 1, wobei der eine oder die mehreren Prozessoren veranlasst werden, weitere Operationen durchzuführen, umfassend: das Erkennen des Verhältnisses zwischen der plattformunabhängigen Programmiersprache und der integrierten Programmiersprache mithilfe maschinellen Lernen; und das Bereitstellen von Daten über die plattformunabhängige Programmiersprache an die Erweiterung zur Analyse der integrierten Programmiersprachen aufgrund des vom maschinellen Lernen bestimmten Verhältnisses.
  11. System nach Anspruch 3, worin die Knoten im Graphen Knoten von der integrierten Programmiersprache und Knoten von der plattformunabhängigen Programmiersprache beinhalten können und worin die die Kanten im Graphen zwischen Knoten von der integrierten Programmiersprache und Knoten von der plattformunabhängigen Programmiersprache wechseln können.
  12. System nach Anspruch 11, worin der eine oder die mehreren Prozessoren dazu veranlasst werden, weitere Operationen durchzuführen, Folgendes umfassend: Ermitteln – aufgrund der Daten über die plattformunabhängige Programmiersprache, die an die Erweiterung zur Analyse der integrierten Programmiersprachen bereitgestellt wurden – ob einer der Knoten von der plattformunabhängigen Programmiersprache einen eindeutigen Namen besitzt; und Adressierung des Knotens von der plattformunabhängigen Programmiersprache mithilfe des eindeutigen Namens.
  13. System nach Anspruch 12, worin der eine oder die mehreren Prozessoren dazu veranlasst werden, weitere Operationen durchzuführen, Folgendes umfassend: Hinzufügen eines Knotens zu einer Grafik durch den Analysator plattformunabhängiger Programmierung, wobei der Knoten einen nichteindeutigen Namen und einen Kantensatz zwischen dem Knoten mit dem nichteindeutigen Namen und dem Knoten mit dem eindeutigen Namen hat; und Hinzufügen, durch die Erweiterung zur Analyse der integrierten Programmiersprachen, einer Kante zu dem Knoten mit dem nichteindeutigen Namen, worin der Knoten mit dem eindeutigen Namen mithilfe der Kanten von dem Knoten mit dem nichteindeutigen Namen identifiziert wird.
  14. Ein oder mehrere nicht-transitorische computerlesbare Medien, die, wenn Sie von einem oder mehreren Prozessoren ausgeführt werden, den einen oder die mehreren Prozessoren veranlassen, Operationen durchzuführen, umfassend: das Analysieren (405) einer plattformunabhängigen Programmiersprache in einer Quelldatei mithilfe eines Analysators plattformunabhängiger Programmierung, worin der Analysator plattformunabhängiger Programmierung eine Erweiterung zur Analyse integrierter Programmiersprachen beinhaltet; als Reaktion auf das Erkennen einer integrierten Programmiersprache in der Quelldatei durch den Analysator plattformunabhängiger Programmierung das Aufrufen (410) der Erweiterung zur Analyse der integrierten Programmiersprache; das Bereitstellen (415) von Daten über die plattformunabhängige Programmiersprache an die Erweiterung zur Analyse der integrierten Programmiersprachen; und das Generieren (420) von semantischen Informationen über die integrierte Programmiersprache und die plattformunabhängige Programmiersprache, worin Teile der Quelldatei, die sich in der integrierten Programmiersprache befinden, Teilen der Quelldatei, die sich in der plattformunabhängigen Programmiersprache befinden, über die semantischen Informationen zugewiesen werden.
DE202015009280.2U 2014-08-28 2015-06-29 Integrierte domänenspezifische Sprachen als erstklassige Codeartefakte Active DE202015009280U1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US14/471,777 US20160062748A1 (en) 2014-08-28 2014-08-28 Embedded domain specific languages as first class code artifacts
US14/471,777 2014-08-28

Publications (1)

Publication Number Publication Date
DE202015009280U1 true DE202015009280U1 (de) 2017-01-19

Family

ID=53718146

Family Applications (1)

Application Number Title Priority Date Filing Date
DE202015009280.2U Active DE202015009280U1 (de) 2014-08-28 2015-06-29 Integrierte domänenspezifische Sprachen als erstklassige Codeartefakte

Country Status (3)

Country Link
US (1) US20160062748A1 (de)
DE (1) DE202015009280U1 (de)
WO (1) WO2016032616A1 (de)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10915304B1 (en) * 2018-07-03 2021-02-09 Devfactory Innovations Fz-Llc System optimized for performing source code analysis
US11704117B2 (en) 2018-07-03 2023-07-18 Devfactory Innovations Fz-Llc System optimized for performing source code analysis
US11948118B1 (en) 2019-10-15 2024-04-02 Devfactory Innovations Fz-Llc Codebase insight generation and commit attribution, analysis, and visualization technology
US11379200B2 (en) 2020-01-30 2022-07-05 Oracle International Corporation Method for applying graph-specific compiler optimizations to graph analysis programs

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7058562B2 (en) * 2001-03-03 2006-06-06 Hewlett-Packard Development Company, L.P. Apparatus and method for performing event processing in a mixed-language simulator
US7219338B2 (en) * 2003-03-25 2007-05-15 Microsoft Corporation Multi-language compilation
US20070044066A1 (en) * 2005-08-19 2007-02-22 Microsoft Corporation Embedded multi-language programming
US8533672B2 (en) * 2008-03-20 2013-09-10 Sap Ag Extending the functionality of a host programming language

Also Published As

Publication number Publication date
US20160062748A1 (en) 2016-03-03
WO2016032616A1 (en) 2016-03-03

Similar Documents

Publication Publication Date Title
DE112016003355B4 (de) Sicherer Einsatz einer Anwendung über Einsatzorte hinweg
DE112019002235T5 (de) Einbinden eines wörterbuch-bearbeitungssystems in ein text mining
DE202016005239U1 (de) Graph-basierte Abfragen
DE112012003716T5 (de) Erzeugen von kompiliertem Code, der Registeraktivität angibt
DE112018005616T5 (de) Blockweise extraktion von dokumentmetadaten
EP2354968A1 (de) Hyperadapter und Verfahren zum Zugreifen auf Dokumente in einer Dokumentenbasis
DE102014103279A1 (de) Pivot-Facets für Text-Mining und Suche
Thiele et al. Agent-based modelling: Tools for linking NetLogo and R
DE202014010926U1 (de) Ein System zur Modellierung von Quellcode mit Codesegmenten, denen der Quellort fehlt
DE112018004660T5 (de) Verwenden von kommentaren zum bereitstellen von optimierungen
DE202015009280U1 (de) Integrierte domänenspezifische Sprachen als erstklassige Codeartefakte
DE112018005725T5 (de) Daten-deidentifikation auf der grundlage eines erkennens von zulässigen konfigurationen für daten-deidentifikationsprozesse
Fronza et al. Cooperation wordle using pre-attentive processing techniques
DE102014112983A1 (de) Aktive Wissenslenkung beruhend auf Dokumententiefenanalyse
DE202016007893U1 (de) Systeme zum Entfernen von PLT-Stubs aus dynamisch verknüpften Binärdateien
DE112011103406T5 (de) Verwaltung von nicht geänderten Objekten
DE112021004694T5 (de) Trainieren eines frage-antwort-dialogsystems zum vermeiden von gegnerischen angriffen
DE102012217315A1 (de) Verwenden von nativen Routinen an Stelle von emulierten Routinen in einer emulierten Anwendung
DE102021123058A1 (de) Maskieren von sensiblen informationen in einem dokument
DE112009001892T5 (de) Datensatz basierte Codestruktur
DE112021001743T5 (de) Vektoreinbettungsmodelle für relationale tabellen mit null- oder äquivalenten werten
DE202016008006U1 (de) Generierung von Integrationstests im Kleinen
DE112020004806T5 (de) Cluster-sicherheit auf der grundlage von inhalten virtueller maschinen
DE112020000873T5 (de) Automatisierte auflösung von über- und unterspezifikation in einem wissensgraphen
DE102019008598A1 (de) Identifikation und Visualisierung von Assoziationen zwischen Code, der von einem Modell generiert ist, und Quellen, welche die Codegeneration beeinflussen

Legal Events

Date Code Title Description
R207 Utility model specification
R081 Change of applicant/patentee

Owner name: GOOGLE LLC (N.D.GES.D. STAATES DELAWARE), MOUN, US

Free format text: FORMER OWNER: GOOGLE INC., MOUNTAIN VIEW, CALIF., US

R082 Change of representative

Representative=s name: BETTEN & RESCH PATENT- UND RECHTSANWAELTE PART, DE

R150 Utility model maintained after payment of first maintenance fee after three years
R151 Utility model maintained after payment of second maintenance fee after six years
R152 Utility model maintained after payment of third maintenance fee after eight years