SlideShare ist ein Scribd-Unternehmen logo
1 von 71
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
 CTO der Fairmas GmbH in Berlin
 Community Leader DNUG Berlin
 Blogger / .NET Code Geek
 Sprecher
 MSDN Moderator
 Freier Autor
(Entwickler.de, Heise, DotNetPro, Informatik aktuell)
 Open Source
(SharpGL, Roslyn, FxCopAnalyzers)
Robin Sedlaczek
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
01 | Überblick
Robin Sedlaczek | Chief Technical Officer at Fairmas GmbH
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
DIE COMPILER-BLACKBOX
 Compiler sind klassisch gesehen Blackboxes
 Geschlossene Softwarekomponenten
 Übersetzen Quellcode in etwas Ausführbares (Binärdateien)
Compiler
/// <summary>
/// This is the base class for all
/// shaders (vertex and fragment). It
/// offers functionality which is core
/// to all shaders, such as file
/// loading and binding.
/// </summary>
public class Shader
{
public void Create(OpenGL gl, uint shaderType,
string source)
{
// Create the OpenGL shader object.
shaderObject = gl.CreateShader(shaderType);
// Set the shader source.
gl.ShaderSource(shaderObject, source);
// Compile the shader object.
gl.CompileShader(shaderObject);
// Now that we've compiled the shader, check
// it's compilation status. If it's not
// compiled properly, we're going to throw
// an exception.
if (GetCompileStatus(gl) == false)
{
throw new ShaderCompilationException(
string.Format(
"Failed to compile shader {0}.",
shaderObject), GetInfoLog(gl));
}
}
Code File
1 1 0 0 1
0 1 1
1 1 0 1 0
1 1 1
0 1 1 1 1 0 0 1
1 0 1 0 1
1 1 0 0 1 0 1 1
0 1 1 1 0 1
1 1 0 1 0 0 0 1
1 0 1 0 1
0 1 1 1 1 0 0 1
1 0 1 0 1
1 1 0 0 1 0 1 1
0 1 1 0 1
1 0 1 0 1
Binary File
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
DAS PROBLEM MIT DER BLACKBOX
 tiefes Verständnis des Codes während Übersetzung
 Wissen, dass von IDEs und Werkzeugen genutzt werden könnte
 Problem: Wissen steht nach Kompilierung nicht mehr zur Verfügung
 Devs/Toolhersteller müssen ggf. Code selbst analysieren
Compiler
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
LÖSUNG DES PROBLEMS
 Aufbrechen der Blackbox
 Bereitstellung einer API-Schicht über dem Compiler
 Bereitstellung der Compiler-Ergebnisse über Objektmodelle
Phase 1 Phase 2 Phase 3 Phase 4
Blackbox wird zur Plattform:
.NET Compiler Platform
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
VORTEILE/NUTZEN
 Zugriff auf Compiler-Wissen zu jeder Zeit
 Code-bezogenen Aufgaben in eigenen Anwendungen
 Metaprogrammierung
 Codetransformation und Codegenerierung
 Interaktivität (VS Immediate Window, C# Script, REPL)
 Einbettung C#/VB in DSLs
Soweit die technische Sicht…
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
OPEN SOURCE
 Roslyn ist Open Source!
https://github.com/dotnet/roslyn
 Verwaltet von der .NET Foundation
http://www.dotnetfoundation.org/projects
 Einblicke und Debugging des Codes
 Mitwirkung der Community
 Fork für eigene Zwecke
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
VISUAL STUDIO
 VS 2015: umfassender Umbau der IDE; Editor- und Sprachfeatures
basieren nun auf Roslyn
 .NET Compiler Platform SDK als VS-Extension verfügbar
 3 Projektvorlagen (Analyzer, Refactoring, Stand-Alone)
 Syntax Visualizer
 Visual Studio 2015 SDK vorausgesetzt
 Compiler/Workspace-APIs als NuGet-Packages verfügbar
 Scripting-API als NuGet-Package verfügbar
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
02 | Grundlagen
Robin Sedlaczek | Chief Technical Officer at Fairmas GmbH
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
WAS TUT EIN COMPILER?
 Übersetzt z.B. VB.NET, C# nach IL Code, C# nach Maschinencode (.NET Native),
C/C++ in Maschinencode...
Compiler
/// <summary>
/// This is the base class for all
/// shaders (vertex and fragment). It
/// offers functionality which is core
/// to all shaders, such as file
/// loading and binding.
/// </summary>
public class Shader
{
public void Create(OpenGL gl, uint shaderType,
string source)
{
// Create the OpenGL shader object.
shaderObject = gl.CreateShader(shaderType);
// Set the shader source.
gl.ShaderSource(shaderObject, source);
// Compile the shader object.
gl.CompileShader(shaderObject);
// Now that we've compiled the shader, check
// it's compilation status. If it's not
// compiled properly, we're going to throw
// an exception.
if (GetCompileStatus(gl) == false)
{
throw new ShaderCompilationException(
string.Format(
"Failed to compile shader {0}.",
shaderObject), GetInfoLog(gl));
}
}
Code File
1 1 0 0 1
0 1 1
1 1 0 1 0
1 1 1
0 1 1 1 1 0 0 1
1 0 1 0 1
1 1 0 0 1 0 1 1
0 1 1 1 0 1
1 1 0 1 0 0 0 1
1 0 1 0 1
0 1 1 1 1 0 0 1
1 0 1 0 1
1 1 0 0 1 0 1 1
0 1 1 0 1
1 0 1 0 1
Binary File
 Allgemein: übersetzt Programm aus formaler Quellsprache in semantisch äquivalente
formale Zielsprache
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
FRAGEN
 Aber wie genau macht der Compiler das?
 Wie kann der Compiler eine einfache Textdatei inhaltlich verstehen?
 Wie verwandelt er den Text in ausführbare Bits und Bytes?
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.deAUFBAU EINES COMPILERS
Vorweg, ein kleiner Exkurs…
Aufbau der Blackbox…
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
NATÜRLICHE VS. FORMALE SPRACHEN
 Komplexität
 Ständiger Fluss
 Mehrdeutigkeit
 Fehlertoleranz
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
WAS SIND FORMALE SPRACHEN?
 Mathematische Beschreibung einer Sprache
 Alphabet + Wortbildungsregeln
 Werden durch Zustandsautomaten erkannt
 Klassifiziert in Chomsky-Hierarchie
„Menge von Wörtern, die über einem
bestimmten Alphabet und nach definierten
Regeln gebildet werden können.“
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
DEFINITION FORMALE SPRACHE
 Mathematische Beschreibung = formale Grammatik
V = nicht-terminale Zeichen
Σ = terminale Zeichen (Alphabet)
R = Produktionen (Regeln)
S = Startsymbol (aus V)
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
BEISPIEL FORMALE SPRACHE
Definition: Die Sprache beinhaltet Bedingungsanweisungen. Diese können
verschachtelt sein. Bedingungsanweisungen können etwas auf wahr oder falsch testen.
V = { expr, condition, left, right }
Σ = { id, if, (, ), {, }, true, false, == }
R = {
expr  if (condition) { expr },
condition  left == right,
left  id,
left  true,
left  false,
right  id,
right  true,
right  false
}
S = expr
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
BEISPIEL FORMALE SPRACHE
Ist der folgende Ausdruck Teil der Sprache? Start: expr
(1)  if (condition) { expr }
(1)  if (condition) { if (condition) { } }
(2)  if (left == right) { if (condition) { } }
(2)  if (left == right) { if (left == right) { } }
(3)  if (id == right) { if (left == right) { } }
(7)  if (id == true) { if (left == right) { } }
(5)  if (id == true) { if (false == right) { } }
(6)  if (id == true) { if (false == id) { } }
V = { expr, condition, left, right }
Σ = { id, if, (, ), {, }, true, false, == }
R = {
expr  if (condition) { expr },
condition  left == right,
left  id,
left  true,
left  false,
right  id,
right  true,
right  false
}
S = expr
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
 Ausdruck ist Teil der Sprache!
if (id == true)
{
if (false == id)
{
}
}
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
 Formales Beschreiben von Textstrukturen (Grammatik)
 Programmiersprachen
 Textstrukturen können mit Algorithmus erkannt werden (Parsen)
 Einlesen, Syntaxüberprüfung
BEISPIEL FORMALE SPRACHE
Was bedeutet das für einen Compiler?
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.deBEISPIEL FORMALE SPRACHE
expr
conditionif (
AST
(Abstract Syntax Tree)
) { }expr
Start: expr
 if (condition) { expr }
 if (condition) { if (condition) { } }
 if (left == right) { if (condition) { } }
 if (left == right) { if (left == right) { } }
 if (id == right) { if (left == right) { } }
 if (id == true) { if (left == right) { } }
 if (id == true) { if (false == right) { } }
 if (id == true) { if (false == id) { } }
conditionif ( ) { }
left == right
left == right
id
true
false
id
nicht-terminal
terminal
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
 Textstrukturen (Syntax) als Baumstruktur darstellbar
 Analyse und Auswertung des Baums
 Syntaxanalyse
 Tiefes Verständnis der Textstruktur
BEISPIEL FORMALE SPRACHE
Was bedeutet das für einen Compiler?
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.deAUFBAU EINES COMPILERS
Zerlegen des
Quelltextes in Tokens
Parsen der Tokens in
die Syntax, die von
der Grammatik
vorgegeben ist (AST)
Tokenizer/
Lexer
Parser
Lexikalische
Analyse
Syntaktische
Analyse
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
 Aufbau des Codes
 Strukturen, Klassen, Aufzählungen
 Methoden, Eigenschaften, Variablen
 Bedingungen, Schleifen
 …
SYNTAXANALYSE
Was weiß der Compiler?
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
SYNTAXANALYSE
Was weiß der Compiler bisher nicht?
public virtual void Initialize(int count)
{
particles.Clear();
for (int i = 0; i < count; i++)
{
Particle particle = new BasicParticle();
particle.Intialize(rand);
particles.Add(particle);
}
}
Von welchem Typ sind die
Parameter?
Welche Member dürfen aufgerufen
werden?
Welche Variablen sind hier gültig?
Semantik!
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
Symboltabelle
 Deklarationen analysieren
SYMBOLE
/// <summary>
/// This is the base class for all
/// shaders (vertex and fragment). It
/// offers functionality which is core
/// to all shaders, such as file
/// loading and binding.
/// </summary>
public class Shader
{
public void Create(OpenGL gl, uint shaderType,
string source)
{
// Create the OpenGL shader object.
shaderObject = gl.CreateShader(shaderType);
// Set the shader source.
gl.ShaderSource(shaderObject, source);
// Compile the shader object.
gl.CompileShader(shaderObject);
// Now that we've compiled the shader, check
// it's compilation status. If it's not
// compiled properly, we're going to throw
// an exception.
if (GetCompileStatus(gl) == false)
{
throw new ShaderCompilationException(
string.Format( "Failed to compile shader {0}.",
shaderObject), GetInfoLog(gl));
}
}
Code File
Assemblies
 Benannte Symbole bilden
 Symboltabelle aufbauen
 Typen und Typsignaturen bekannt machen
Referenz
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
BINDER
Symboltabelle
/// <summary>
/// This is the base class for all
/// shaders (vertex and fragment). It
/// offers functionality which is core
/// to all shaders, such as file
/// loading and binding.
/// </summary>
public class Shader
{
public void Create(OpenGL gl, uint shaderType,
string source)
{
// Create the OpenGL shader object.
shaderObject = gl.CreateShader(shaderType);
// Set the shader source.
gl.ShaderSource(shaderObject, source);
// Compile the shader object.
gl.CompileShader(shaderObject);
// Now that we've compiled the shader, check
// it's compilation status. If it's not
// compiled properly, we're going to throw
// an exception.
if (GetCompileStatus(gl) == false)
{
throw new ShaderCompilationException(
string.Format(
"Failed to compile shader {0}.",
shaderObject), GetInfoLog(gl));
}
}
Code File
var my = new MyType();
public void DoSomething(MyType my) { … }
public event EventHandler MyEvent;
 Identifier im Code zu Symbolen zuordnen
 Bedeutung des Codes
 Semantische Analyse
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.deAUFBAU EINES COMPILERS
Zerlegen des
Quelltextes in Tokens
Parsen der Tokens in
die Syntax, die von
der Grammatik
vorgegeben ist (AST)
Typdeklarationen aus
Code und Metadaten
zu benannten
Symbolen
(Symboltabelle)
Identifier in Code
abstimmen/verbinden
mit benannten
Symbolen
Tokenizer/
Lexer
Parser Symbols Binder
Lexikalische
Analyse
Syntaktische
Analyse
Semantische
Analyse
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.deAUFBAU EINES COMPILERS
Zerlegen des
Quelltextes in Tokens
Parsen der Tokens in
die Syntax, die von
der Grammatik
vorgegeben ist (AST)
Typdeklarationen aus
Code und Metadaten
zu benannten
Symbolen
(Symboltabelle)
Identifier in Code
abstimmen/verbinden
mit benannten
Symbolen
Plattformunabhängige
Optimierungen
Plattformabhängige
Optimierungen
All gesammelten
Informationen werden in
Binary/Assembly
ausgegeben
Tokenizer/
Lexer
Parser Symbols Binder
CodeGen
Preprocessor
Code Generator
CodeGen
Postprocessor
Lexikalische
Analyse
Syntaktische
Analyse
Semantische
Analyse
Synthese-
Phase
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
03 | APIs
Robin Sedlaczek | Chief Technical Officer at Fairmas GmbH
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
APIS
1. Compiler Services
2. Workspace APIs
3. Scripting APIs (neu)
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
API 1 – COMPILER SERVICES
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
API 1 – COMPILER SERVICES
 Compiler API
- Sprachspezifische Objektmodelle für alle Phasen der Kompilierung
- Unveränderlicher Snapshot eines Compiler-Aufrufes
- Keine Abhängigkeiten zu Visual Studio
 Diagnostics API
- Erweiterbare API (Analyzers)
- Hängt sich direkt in Analysephase
- Fehler, Warnungen, Informationen
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
API 2 – WORKSPACES
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
API 2 – WORKSPACES
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
API 2 – WORKSPACES
 Objektmodell zur Darstellung einer Solution
 Einstiegspunkt für Solution-weite Analysen und Refactorings
 Zugriff auf Compiler Services
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
API 3 – SCRIPTING
 C#-Engine zur Ausführung von Codeausschnitten
 Code wird in Host ausgeführt, der verfügbare Objekte stellt
 Verwendet für REPL in VS C# Interactive Window
 Ab VS 2015 Update 1
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
APIS - NAMESPACES
 Microsoft.CodeAnalysis
 Microsoft.CodeAnalysis.Workspaces
 Microsoft.CodeAnalysis.Scripting
 Microsoft.CodeAnalysis.CSharp
 Microsoft.CodeAnalysis.CSharp.Workspaces
 Microsoft.CodeAnalysis.CSharp.Scripting
 Microsoft.CodeAnalysis.VisualBasic
 Microsoft.CodeAnalysis.VisualBasic.Workspaces
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
04 | Syntax- und Symbolanalyse
Robin Sedlaczek | Chief Technical Officer at Fairmas GmbH
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
SYNTAXANALYSE
var tree = CSharpSyntaxTree.ParseText(sourceCode);
var node = tree.GetRoot();
 SyntaxTree ist abstrakt
 Parsing über sprachspezifische Ableitung
 SyntaxTree ist immutable
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
SYNTAXANALYSE
node.ChildNodes()
node.ChildTokens()
node.GetLeadingTrivia()
node.GetTrailingTrivia()
node.DescendantNodes()
node.DescendantTokens()
node.DescendantTrivia()
token.LeadingTrivia
token.TrailingTrivia
trivia.GetStructure()
trivia.GetStructure()
Traversierung des Syntaxbaums
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
public.void.Do(string.what).
{.
....var.so.=.true;.
.
#if.DEBUG.
....so.=.false;.
#endif.
.
....if.(so.==.what).
........DontDo();.
}.
SYNTAX NODE
 SyntaxNode (Declarations, Statements, Clauses, Expressions)
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
public void Do(string what)
{.
....var.so.=.true;.
.
#if.DEBUG.
....so.=.false;.
#endif.
.
....if.(so.==.what).
........DontDo();.
}.
SYNTAX NODE
 SyntaxNode (Declarations, Statements, Clauses, Expressions)
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
public void Do(string what)
{.
....var.so.=.true;.
.
#if.DEBUG.
....so.=.false;.
#endif.
.
....if.(so.==.what)).
........DontDo();.
}.
SYNTAX NODE
 SyntaxNode (Declarations, Statements, Clauses, Expressions)
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
public void Do(string what)
{.
....var.so.=.true;.
.
#if.DEBUG.
....so.=.false;.
#endif.
.
....if.(so.==.what)).
........DontDo();.
}.
SYNTAX NODE
 SyntaxNode (Declarations, Statements, Clauses, Expressions)
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
public void Do(string what)
{.
....var.so.=.true;.
.
#if.DEBUG.
....so.=.false;.
#endif.
.
....if.(so.==.what)
........DontDo();.
}.
SYNTAX NODE
 SyntaxNode (Declarations, Statements, Clauses, Expressions)
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
SYNTAX NODE
 SyntaxNode (Declarations, Statements, Clauses, Expressions)
public void Do(string what)
{.
....var.so.=.true;.
.
#if.DEBUG.
....so.=.false;.
#endif.
.
....if.(so.==.what)
........DontDo();.
}.
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
public void Do(string what)
{.
....var.so.=.true;.
.
#if.DEBUG.
....so.=.false;.
#endif.
.
....if.(so.==.what)
........DontDo();.
}.
SYNTAX TOKEN
 SyntaxToken (Keyword, Identifier, Operator, Punctuation)
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
public void Do(string what)
{.
....var.so.=.true;.
.
#if.DEBUG.
....so.=.false;.
#endif.
.
....if.(so.==.what)
........DontDo();.
}.
SYNTAX TOKEN
 SyntaxToken (Keyword, Identifier, Operator, Punctuation)
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
public void Do(string what)
{.
....var.so.=.true;.
.
#if.DEBUG.
....so.=.false;.
#endif.
.
....if.(so.==.what)
........DontDo();.
}.
SYNTAX TOKEN
 SyntaxToken (Keyword, Identifier, Operator, Punctuation)
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
public void Do(string what)
{.
....var.so.=.true;.
.
#if.DEBUG.
....so.=.false;.
#endif.
.
....if.(so.==.what)
........DontDo();.
}.
SYNTAX TOKEN
 SyntaxToken (Keyword, Identifier, Operator, Punctuation)
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
public void Do(string what)
{.
....var.so.=.true;.
.
#if.DEBUG.
....so.=.false;.
#endif.
.
....if.(so.==.what)
........DontDo();.
}.
SYNTAX TOKEN
 SyntaxToken (Keyword, Identifier, Operator, Punctuation)
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
SYNTAX TOKEN
 SyntaxToken (Keyword, Identifier, Operator, Punctuation)
public void Do(string what)
{.
....var.so.=.true;.
.
#if.DEBUG.
....so.=.false;.
#endif.
.
....if.(so.==.what)
........DontDo();.
}.
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
SYNTAX TOKEN
 SyntaxToken (Keyword, Identifier, Operator, Punctuation)
public void Do(string what)
{.
....var.so.=.true;.
.
#if.DEBUG.
....so.=.false;.
#endif.
.
....if.(so.==.what)
........DontDo();.
}.
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
public.void.Do(string.what).
{.
....var.so.=.true;.
.
#if.DEBUG.
....so.=.false;.
#endif.
.
....if.(so.==.what).
........DontDo();.
}.
SYNTAX TRIVIA
 SyntaxTrivia (Leerzeichen, Kommentare, Pre-processor Direktiven)
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
SYNTAX KINDS
 Kind()-Erweiterungsmethode identifiziert exaktes Syntaxelement für
Node, Token und Trivia
 Enum: Microsoft.CodeAnalysis.CSharp.SyntaxKind (463 Werte)
 Enum: Microsoft.CodeAnalysis.VisualBasic.SyntaxKind (642 Werte)
public enum SyntaxKind : ushort
{
None,
List,
Argument,
ArgumentList,
ClassDeclaration,
MethodDeclaration,
NewKeyword,
DollarToken,
PercentToken,
OpenBracketToken,
CloseBracketToken,
…
}
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
SYNTAX TYPES
 Syntaxtypen für alle Syntaxelemente (sprachspezifisch)
 Namespace: Microsoft.CodeAnalysis.CSharp.Syntax (214 Klassen)
 Namespace: Microsoft.CodeAnalysis.VisualBasic.Syntax (275 Klassen)
public.void.Do(string.what).
{.
....var.so.=.true;.
.
#if.DEBUG.
....so.=.false;.
#endif.
.
....if.(so.==.what).
........DontDo();.
}.
2
3
1
4
1 – MethodDeclarationSyntax
2 – ParameterListSyntax
3 – VariableDeclarationSyntax
4 – IfStatementSyntax
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
SYNTAX KINDS VS. SYNTAX TYPES
 Was passt hier nicht?
463(C#)
642(VB)
TypesKinds vs.
214 (C#)
275 (VB)
 Syntax Types sind allgemeiner als Kinds
 Ein Typ für ähnliche Syntaxelemente
 By Design
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
SYNTAX KINDS VS. SYNTAX TYPES
 1 : 1 - Beziehungen zwischen Types und Kinds
 Es gibt aber ein paar Ausnahmen!
 Beispiele…
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
SYNTAX KINDS VS. SYNTAX TYPES
a = 1;
a *= 2;
a += 4;
1 | 1
true && true;
true || false;
Kind für jeden binären Operator (logisch,
arithmetisch, Bit-Verschiebung, Verbundzuweisung)
Ein Syntaxtype für binäre Ausdrücke.
Binärer Ausdruck
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
SYNTAX KINDS VS. SYNTAX TYPES
myObject.MyMember
myObject->MyMember
dictionary!name
Member-Zugriff
(C#)
(VB)
Kind für einfachen Member-Zugriff, Zugriff über
Zeiger und Zugriff auf Dictionary in VB.
Ein Syntaxtype für Member-Zugriffe.
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
SEMANTISCHE ANALYSE
 Compilation ist abstrakt
 Semantische Analyse über Ableitungen
 Symboltabelle ist immutable
var compilation = CSharpCompilation
.Create("CodeInCurrentProject")
.AddReferences(references)
.AddSyntaxTrees(trees);
var semanticModel = compilation.GetSemanticModel(tree);
var emitResult = compilation.Emit(path);
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
05 | Time to Code
Robin Sedlaczek | Chief Technical Officer at Fairmas GmbH
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
Time to Code | Am Anfang war die Konsole…
Robin Sedlaczek | Chief Technical Officer at Fairmas GmbH
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
Time to Code | Refactoring, Analzyer & CodeFix
Robin Sedlaczek | Chief Technical Officer at Fairmas GmbH
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
Real World Example | Semantic Versioning
Robin Sedlaczek | Chief Technical Officer at Fairmas GmbH
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
SEMANTISCHE VERSIONIERUNG
v1
v2
v3
v4
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
SEMVER.ORG
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
Real World Example | Critical Code
Robin Sedlaczek | Chief Technical Officer at Fairmas GmbH
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
Real World Example | Application Scripting
Robin Sedlaczek | Chief Technical Officer at Fairmas GmbH
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
Roslyn - Ein offener Compiler. Ja, und nun?
„Nun seid Ihr dran!“
RobinSedlaczek.wordpress.com
RobinSedlaczek
RobinSedlaczek@live.de
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
CODE, CODE, CODE
 SensitiveCodeMarker (Critical Code)
 Demo: Verwendung von Roslyn in Kombination mit Visual Studio-Erweiterungen
 Erweiterung bewirkt Markierung von kritischem Code im Code-Editor als Hilfe für den Entwickler
 https://github.com/robinsedlaczek/WaveDev.SensitiveCodeMarker (VS-Extension)
 https://github.com/robinsedlaczek/WaveDev.RoomsReservationSystemDemo (Testprojekt)
 ModelR (Application Scripting)
 Demo: sinnvolle Verwendung von C# Scripting in einer eigenen Anwendung
 Verteiltes 3D-Modellierungstool basierend auf SignalR, WPF, MVVM Light und SharpGL
 Mittels C# Scripting wird das Tool erweiterbar und automatisierbar gemacht
 https://github.com/robinsedlaczek/ModelR

Weitere ähnliche Inhalte

Andere mochten auch

Barna encendida - Evento de Marketing Digital de SiteGround - José Ramón Padrón
Barna encendida - Evento de Marketing Digital de SiteGround - José Ramón PadrónBarna encendida - Evento de Marketing Digital de SiteGround - José Ramón Padrón
Barna encendida - Evento de Marketing Digital de SiteGround - José Ramón Padrón
SiteGround España
 
Meier_REET_425_Final_Project
Meier_REET_425_Final_ProjectMeier_REET_425_Final_Project
Meier_REET_425_Final_Project
jmeier72
 
[Programar2013] Introdução ao Cloud Computing e ao Windows Azure
[Programar2013] Introdução ao Cloud Computing e ao Windows Azure[Programar2013] Introdução ao Cloud Computing e ao Windows Azure
[Programar2013] Introdução ao Cloud Computing e ao Windows Azure
Vitor Tomaz
 
Film postercodes and conventions
Film postercodes and conventionsFilm postercodes and conventions
Film postercodes and conventions
nBrownie
 
Running your Dev&Test environment on the Cloud: Visual Studio Online
Running your Dev&Test environment on the Cloud: Visual Studio OnlineRunning your Dev&Test environment on the Cloud: Visual Studio Online
Running your Dev&Test environment on the Cloud: Visual Studio Online
Vitor Tomaz
 

Andere mochten auch (16)

PLT presentation
PLT presentationPLT presentation
PLT presentation
 
Hobbfc
HobbfcHobbfc
Hobbfc
 
Barna encendida - Evento de Marketing Digital de SiteGround - José Ramón Padrón
Barna encendida - Evento de Marketing Digital de SiteGround - José Ramón PadrónBarna encendida - Evento de Marketing Digital de SiteGround - José Ramón Padrón
Barna encendida - Evento de Marketing Digital de SiteGround - José Ramón Padrón
 
Music video copyright
Music video copyrightMusic video copyright
Music video copyright
 
Meier_REET_425_Final_Project
Meier_REET_425_Final_ProjectMeier_REET_425_Final_Project
Meier_REET_425_Final_Project
 
Abant İzzet Baysal Üniversitesi Enstitü Ön Kayıt Sistemi v.2
Abant İzzet Baysal Üniversitesi Enstitü Ön Kayıt Sistemi v.2Abant İzzet Baysal Üniversitesi Enstitü Ön Kayıt Sistemi v.2
Abant İzzet Baysal Üniversitesi Enstitü Ön Kayıt Sistemi v.2
 
CEOIT_Jun2002
CEOIT_Jun2002CEOIT_Jun2002
CEOIT_Jun2002
 
Carlincaturas
CarlincaturasCarlincaturas
Carlincaturas
 
Action plan week 5
Action plan week 5Action plan week 5
Action plan week 5
 
[Programar2013] Introdução ao Cloud Computing e ao Windows Azure
[Programar2013] Introdução ao Cloud Computing e ao Windows Azure[Programar2013] Introdução ao Cloud Computing e ao Windows Azure
[Programar2013] Introdução ao Cloud Computing e ao Windows Azure
 
[AzurePT] Desenvolvimento para o Windows Azure: Diferença para o developer
[AzurePT] Desenvolvimento para o Windows Azure: Diferença para o developer[AzurePT] Desenvolvimento para o Windows Azure: Diferença para o developer
[AzurePT] Desenvolvimento para o Windows Azure: Diferença para o developer
 
Film postercodes and conventions
Film postercodes and conventionsFilm postercodes and conventions
Film postercodes and conventions
 
Running your Dev&Test environment on the Cloud: Visual Studio Online
Running your Dev&Test environment on the Cloud: Visual Studio OnlineRunning your Dev&Test environment on the Cloud: Visual Studio Online
Running your Dev&Test environment on the Cloud: Visual Studio Online
 
Visual Studio ALM 2013 - Edition Comparison
Visual Studio ALM 2013 - Edition ComparisonVisual Studio ALM 2013 - Edition Comparison
Visual Studio ALM 2013 - Edition Comparison
 
Improved software testing using Visual Studio and TFS 2010
Improved software testing using Visual Studio and TFS 2010 Improved software testing using Visual Studio and TFS 2010
Improved software testing using Visual Studio and TFS 2010
 
Atlassian Bamboo
Atlassian BambooAtlassian Bamboo
Atlassian Bamboo
 

Ähnlich wie Roslyn - Ein offener Compiler. Ja, und nun?

Ähnlich wie Roslyn - Ein offener Compiler. Ja, und nun? (20)

#ADC 2016 - Roslyn & Visual Studio Extensions
#ADC 2016 - Roslyn & Visual Studio Extensions#ADC 2016 - Roslyn & Visual Studio Extensions
#ADC 2016 - Roslyn & Visual Studio Extensions
 
Thread-safe .NET durch Immutables
Thread-safe .NET durch ImmutablesThread-safe .NET durch Immutables
Thread-safe .NET durch Immutables
 
BIT I WiSe 2014 | Basisinformationstechnologie I - 08: Programmiersprachen I
BIT I WiSe 2014 | Basisinformationstechnologie I - 08: Programmiersprachen IBIT I WiSe 2014 | Basisinformationstechnologie I - 08: Programmiersprachen I
BIT I WiSe 2014 | Basisinformationstechnologie I - 08: Programmiersprachen I
 
ADC Core 2017 - Warum warten auf die IDE?
ADC Core 2017 - Warum warten auf die IDE?ADC Core 2017 - Warum warten auf die IDE?
ADC Core 2017 - Warum warten auf die IDE?
 
BASTA! 2016 - Roslyn & Visual Studio Extensions
BASTA! 2016 - Roslyn & Visual Studio ExtensionsBASTA! 2016 - Roslyn & Visual Studio Extensions
BASTA! 2016 - Roslyn & Visual Studio Extensions
 
Developer Week 2019: Identity & Access Management in der Realitaet
Developer Week 2019: Identity & Access Management in der RealitaetDeveloper Week 2019: Identity & Access Management in der Realitaet
Developer Week 2019: Identity & Access Management in der Realitaet
 
Web Entwicklung mit PHP - Teil 1
Web Entwicklung mit PHP - Teil 1Web Entwicklung mit PHP - Teil 1
Web Entwicklung mit PHP - Teil 1
 
#ADC 2016 - C# Script in Action
#ADC 2016 - C# Script in Action#ADC 2016 - C# Script in Action
#ADC 2016 - C# Script in Action
 
Dream-Team: Roslyn & Visual Studio Extensions
Dream-Team: Roslyn & Visual Studio ExtensionsDream-Team: Roslyn & Visual Studio Extensions
Dream-Team: Roslyn & Visual Studio Extensions
 
Funktionales Programmieren mit Clojure
Funktionales Programmieren mit ClojureFunktionales Programmieren mit Clojure
Funktionales Programmieren mit Clojure
 
Magdeburger Developer Days 2018 - Warum warten auf die IDE?
Magdeburger Developer Days 2018 - Warum warten auf die IDE?Magdeburger Developer Days 2018 - Warum warten auf die IDE?
Magdeburger Developer Days 2018 - Warum warten auf die IDE?
 
BASTA! Spring 2017 - C# Script in Action
BASTA! Spring 2017 - C# Script in ActionBASTA! Spring 2017 - C# Script in Action
BASTA! Spring 2017 - C# Script in Action
 
DevOpenSpace 2017 - .NET, .NET Core & .NET Standard - Und ich mal wieder mitt...
DevOpenSpace 2017 - .NET, .NET Core & .NET Standard - Und ich mal wieder mitt...DevOpenSpace 2017 - .NET, .NET Core & .NET Standard - Und ich mal wieder mitt...
DevOpenSpace 2017 - .NET, .NET Core & .NET Standard - Und ich mal wieder mitt...
 
BASTA! 2017 Jubiläumskonferenz - Warum warten auf die IDE!?
BASTA! 2017 Jubiläumskonferenz - Warum warten auf die IDE!?BASTA! 2017 Jubiläumskonferenz - Warum warten auf die IDE!?
BASTA! 2017 Jubiläumskonferenz - Warum warten auf die IDE!?
 
BASTA! Spring 2018 - Architekturen für .NET Core-Anwendungen
BASTA! Spring 2018 - Architekturen für .NET Core-AnwendungenBASTA! Spring 2018 - Architekturen für .NET Core-Anwendungen
BASTA! Spring 2018 - Architekturen für .NET Core-Anwendungen
 
Perl 5 Quiz Chemnitz Edition
Perl 5 Quiz Chemnitz EditionPerl 5 Quiz Chemnitz Edition
Perl 5 Quiz Chemnitz Edition
 
BASTA! Spring 2017 - Warum warten auf die IDE? Direct Coding in der eigenen A...
BASTA! Spring 2017 - Warum warten auf die IDE? Direct Coding in der eigenen A...BASTA! Spring 2017 - Warum warten auf die IDE? Direct Coding in der eigenen A...
BASTA! Spring 2017 - Warum warten auf die IDE? Direct Coding in der eigenen A...
 
DNUGBB 2017 - .Net, .Net Core, .Net Standard
DNUGBB 2017 - .Net, .Net Core, .Net StandardDNUGBB 2017 - .Net, .Net Core, .Net Standard
DNUGBB 2017 - .Net, .Net Core, .Net Standard
 
Programmieren mit PROLOG
Programmieren mit PROLOGProgrammieren mit PROLOG
Programmieren mit PROLOG
 
Java und Python - Das Beste aus beiden Welten nutzen
Java und Python - Das Beste aus beiden Welten nutzenJava und Python - Das Beste aus beiden Welten nutzen
Java und Python - Das Beste aus beiden Welten nutzen
 

Mehr von Robin Sedlaczek

Mehr von Robin Sedlaczek (14)

Developer Week 2019: .NET, .NET Core und .NET Standard - Ein Richtungskompass
Developer Week 2019: .NET, .NET Core und .NET Standard - Ein RichtungskompassDeveloper Week 2019: .NET, .NET Core und .NET Standard - Ein Richtungskompass
Developer Week 2019: .NET, .NET Core und .NET Standard - Ein Richtungskompass
 
Developer Week 2019: Architekturen für .NET Core-Anwendungen
Developer Week 2019: Architekturen für .NET Core-AnwendungenDeveloper Week 2019: Architekturen für .NET Core-Anwendungen
Developer Week 2019: Architekturen für .NET Core-Anwendungen
 
.NET Core Architecture (UI)
.NET Core Architecture (UI).NET Core Architecture (UI)
.NET Core Architecture (UI)
 
Architekturen für .NET Core-Anwendungen
Architekturen für .NET Core-AnwendungenArchitekturen für .NET Core-Anwendungen
Architekturen für .NET Core-Anwendungen
 
Azure Hybrid Connections
Azure Hybrid ConnectionsAzure Hybrid Connections
Azure Hybrid Connections
 
Architectures for .Net Core Applications
Architectures for .Net Core ApplicationsArchitectures for .Net Core Applications
Architectures for .Net Core Applications
 
Magdeburger Developer Days 2018 - Das perfekte Anwendungsmodell
Magdeburger Developer Days 2018 - Das perfekte AnwendungsmodellMagdeburger Developer Days 2018 - Das perfekte Anwendungsmodell
Magdeburger Developer Days 2018 - Das perfekte Anwendungsmodell
 
Alleskönner: Azure Cosmos DB - Was kann der neue Datenbank-Service von Micros...
Alleskönner: Azure Cosmos DB - Was kann der neue Datenbank-Service von Micros...Alleskönner: Azure Cosmos DB - Was kann der neue Datenbank-Service von Micros...
Alleskönner: Azure Cosmos DB - Was kann der neue Datenbank-Service von Micros...
 
GUI & DESIGN 2017 - Das perfekte Anwendungsmodell. UIs für jedes Device!
GUI & DESIGN 2017 - Das perfekte Anwendungsmodell. UIs für jedes Device!GUI & DESIGN 2017 - Das perfekte Anwendungsmodell. UIs für jedes Device!
GUI & DESIGN 2017 - Das perfekte Anwendungsmodell. UIs für jedes Device!
 
BASTA! 2017 Jubiläumskonferenz - CUIs & The Microsoft Bot Framework
BASTA! 2017 Jubiläumskonferenz - CUIs & The Microsoft Bot FrameworkBASTA! 2017 Jubiläumskonferenz - CUIs & The Microsoft Bot Framework
BASTA! 2017 Jubiläumskonferenz - CUIs & The Microsoft Bot Framework
 
.NET Summit 2017 - .NET, .NET Core, .NET Standard
.NET Summit 2017 - .NET, .NET Core, .NET Standard.NET Summit 2017 - .NET, .NET Core, .NET Standard
.NET Summit 2017 - .NET, .NET Core, .NET Standard
 
#DNUG Berlin-Brandenburg - Conversational User Interfaces (CUIs) und das Micr...
#DNUG Berlin-Brandenburg - Conversational User Interfaces (CUIs) und das Micr...#DNUG Berlin-Brandenburg - Conversational User Interfaces (CUIs) und das Micr...
#DNUG Berlin-Brandenburg - Conversational User Interfaces (CUIs) und das Micr...
 
#ADC 2016 - Conversational User Interfaces
#ADC 2016 - Conversational User Interfaces#ADC 2016 - Conversational User Interfaces
#ADC 2016 - Conversational User Interfaces
 
Code Reviews - Best Practices
Code Reviews - Best PracticesCode Reviews - Best Practices
Code Reviews - Best Practices
 

Roslyn - Ein offener Compiler. Ja, und nun?

Hinweis der Redaktion

  1. 1
  2. 3
  3. 10
  4. Chomsky-Hierachie => Einteilung einer Sprache nach: Ausdrucksstärke der Grammatik Komplexität des Spracherkennenden Automaten
  5. 29
  6. 38
  7. 62
  8. 63
  9. 64
  10. 65
  11. 68
  12. 69
  13. 70