Eraikune, comités estratégicos, julio 2012Eraikune
El documento proporciona información sobre el sector de la construcción en España y Euskadi. En España, la construcción representa el 10,5% del PIB y el 8% del empleo. En Euskadi, representa el 7% del PIB y el 7% del empleo, y entre el 17-30% de las empresas son del sector de la construcción. El documento también analiza los efectos de la crisis en Euskadi, donde la construcción ha perdido el 25% del empleo y el 60% de la actividad entre 2007-2012.
El documento describe un proyecto de trabajo realizado por alumnos de primaria sobre la recolección de la aceituna. El proyecto incluyó actividades en diferentes áreas como conocimiento del medio, lengua, matemáticas e inglés relacionadas con el tema. Los alumnos investigaron sobre el proceso de recolección, visitaron una almazara y elaboraron trabajos como murales, poemas y entrevistas. El proyecto finalizó con una evaluación de los aprendizajes y progresos de los estudiantes.
Este documento describe tres estrategias clave para la lectura: antes de leer, durante la lectura y después de la lectura. Antes de leer, se debe considerar el propósito de la lectura. Durante la lectura, se deben hacer predicciones, plantear hipótesis y relacionar con otras lecturas. Después de leer, se debe resumir la información y organizarla gráficamente.
El documento presenta información sobre computación dividiéndolo en dos grupos: Grupo G que contiene tres integrantes y luego describe brevemente dos tipos de microprocesadores, Intel y AMD.
Este documento presenta una autoevaluación de 14 áreas de la vida personal divididas en categorías como educación, compromiso comunitario, finanzas, salud, familia y amistades. El propósito es que la persona evalúe cada área asignándose una calificación del 1 al 5 y analice después las áreas con mayores y menores puntajes para identificar oportunidades de mejora. Al final, la persona evalúa su nivel de confianza, felicidad y autenticidad, y suma los puntajes totales para monitorear su progreso cada seis
La cooperativa tiene como objetivo ayudar a las personas a desarrollar sus negocios y ideas mediante préstamos iniciales pequeños, con el fin de mejorar sus futuros y hacer crecer la cooperativa. La cooperativa planea comenzar con préstamos pequeños y negocios pequeños para luego expandirse, y su producción también crecerá gradualmente a medida que la cooperativa y los negocios que apoya se desarrollen. La visión de la cooperativa es que para el 2020 los negocios de sus usuarios sean reconocidos a nivel nacional e internacional.
La estructura de una computadora se refiere a la organización y combinación de sus elementos hardware y software. El software se divide en sistemas, aplicaciones y utilerías, mientras que el hardware incluye dispositivos de procesamiento, entrada, salida, almacenamiento y mixtos. El funcionamiento básico de un PC implica que el usuario introduce una orden, el microprocesador la procesa y se comunica con otros componentes para ejecutar la tarea correspondiente.
Este documento trata sobre la seguridad informática. Define la seguridad informática y malware, y describe diferentes tipos de seguridad activa y pasiva, así como varios tipos de malware como virus, gusanos y troyanos. También explica algunos softwares de seguridad comunes como antivirus, cortafuegos y antiespías.
La Corporación Centro Ecuestre Santa Rita es una entidad privada sin ánimo de lucro dedicada a la rehabilitación de personas con discapacidad mediante la equinoterapia y otras terapias. Su misión es prestar servicios de rehabilitación de manera integral a través de la zooterapia, y su visión es convertirse en el principal centro de equinoterapia en el país y formar terapeutas.
El documento presenta las normas de un curso de tercer grado sobre derechos, deberes y faltas leves y graves de los estudiantes, así como los símbolos del uniforme escolar requerido que incluyen camisa, pantalón, corbata y falda de colores específicos, medias y zapatos.
El documento habla sobre los códigos binarios y su uso en computadoras. Explica que los códigos binarios usan los dígitos 0 y 1 para representar texto e instrucciones. Luego describe algunas características de los códigos binarios como la ponderación, distancia, continuidad y autocomplementariedad. También menciona brevemente los códigos ASCII y cómo las computadoras usan números para representar caracteres.
Xavier Prado es un redactor senior especializado en publicidad interactiva con más de 15 años de experiencia. Ha trabajado como director creativo y redactor en varias agencias de publicidad. Cuenta con una maestría en estrategia y creatividad interactiva y licenciatura en publicidad. Ha liderado varios proyectos digitales exitosos para marcas.
Este documento presenta un curso de especialización en sostenibilidad en urbanismo, rehabilitación y edificación ofrecido por la Universidad de Deusto. El curso consta de 5 módulos que cubren temas como sostenibilidad en arquitectura y urbanismo, rehabilitación y gestión urbana sostenible, rehabilitación sostenible en la edificación e integración de energías renovables. El curso está dirigido a profesionales del sector de la construcción y se evalúa a través de trabajos prácticos y una prueba final
Este documento describe la protección jurídica del software en Argentina. Explica que inicialmente el software no estaba protegido explícitamente pero que luego leyes como la 25.036 de 1998 lo incluyeron explícitamente. También describe el proceso de registro del software, ya sea para obras inéditas o publicadas, y los efectos que tiene el registro como establecer los derechos de autor y presunciones sobre la autoría.
El documento describe diferentes modalidades de transmisión de datos en una red interna. Estas incluyen transmisión analógica, digital, paralela y en serie. También describe componentes clave de sistemas de comunicación como emisores, receptores y canales, así como modos de transmisión como conexiones simples, semidúplex y dúplex totales.
Este documento trata sobre la seguridad informática. Define la seguridad informática y malware, y describe diferentes tipos de seguridad activa y pasiva, así como varios tipos de malware como virus, gusanos y troyanos. También explica algunos softwares de seguridad comunes como antivirus, cortafuegos y antiespías.
These are the slides from the .NET Summit 2016 in Munich where I talked about the .NET Compiler Platform and how it can help to solve developers day-to-day challenges directly where they work - the IDE.
At the very last slide, you can find an overview, the descriptions and links to the code of the discussed examples. Everything is at GitHub on my account. :)
Eraikune, comités estratégicos, julio 2012Eraikune
El documento proporciona información sobre el sector de la construcción en España y Euskadi. En España, la construcción representa el 10,5% del PIB y el 8% del empleo. En Euskadi, representa el 7% del PIB y el 7% del empleo, y entre el 17-30% de las empresas son del sector de la construcción. El documento también analiza los efectos de la crisis en Euskadi, donde la construcción ha perdido el 25% del empleo y el 60% de la actividad entre 2007-2012.
El documento describe un proyecto de trabajo realizado por alumnos de primaria sobre la recolección de la aceituna. El proyecto incluyó actividades en diferentes áreas como conocimiento del medio, lengua, matemáticas e inglés relacionadas con el tema. Los alumnos investigaron sobre el proceso de recolección, visitaron una almazara y elaboraron trabajos como murales, poemas y entrevistas. El proyecto finalizó con una evaluación de los aprendizajes y progresos de los estudiantes.
Este documento describe tres estrategias clave para la lectura: antes de leer, durante la lectura y después de la lectura. Antes de leer, se debe considerar el propósito de la lectura. Durante la lectura, se deben hacer predicciones, plantear hipótesis y relacionar con otras lecturas. Después de leer, se debe resumir la información y organizarla gráficamente.
El documento presenta información sobre computación dividiéndolo en dos grupos: Grupo G que contiene tres integrantes y luego describe brevemente dos tipos de microprocesadores, Intel y AMD.
Este documento presenta una autoevaluación de 14 áreas de la vida personal divididas en categorías como educación, compromiso comunitario, finanzas, salud, familia y amistades. El propósito es que la persona evalúe cada área asignándose una calificación del 1 al 5 y analice después las áreas con mayores y menores puntajes para identificar oportunidades de mejora. Al final, la persona evalúa su nivel de confianza, felicidad y autenticidad, y suma los puntajes totales para monitorear su progreso cada seis
La cooperativa tiene como objetivo ayudar a las personas a desarrollar sus negocios y ideas mediante préstamos iniciales pequeños, con el fin de mejorar sus futuros y hacer crecer la cooperativa. La cooperativa planea comenzar con préstamos pequeños y negocios pequeños para luego expandirse, y su producción también crecerá gradualmente a medida que la cooperativa y los negocios que apoya se desarrollen. La visión de la cooperativa es que para el 2020 los negocios de sus usuarios sean reconocidos a nivel nacional e internacional.
La estructura de una computadora se refiere a la organización y combinación de sus elementos hardware y software. El software se divide en sistemas, aplicaciones y utilerías, mientras que el hardware incluye dispositivos de procesamiento, entrada, salida, almacenamiento y mixtos. El funcionamiento básico de un PC implica que el usuario introduce una orden, el microprocesador la procesa y se comunica con otros componentes para ejecutar la tarea correspondiente.
Este documento trata sobre la seguridad informática. Define la seguridad informática y malware, y describe diferentes tipos de seguridad activa y pasiva, así como varios tipos de malware como virus, gusanos y troyanos. También explica algunos softwares de seguridad comunes como antivirus, cortafuegos y antiespías.
La Corporación Centro Ecuestre Santa Rita es una entidad privada sin ánimo de lucro dedicada a la rehabilitación de personas con discapacidad mediante la equinoterapia y otras terapias. Su misión es prestar servicios de rehabilitación de manera integral a través de la zooterapia, y su visión es convertirse en el principal centro de equinoterapia en el país y formar terapeutas.
El documento presenta las normas de un curso de tercer grado sobre derechos, deberes y faltas leves y graves de los estudiantes, así como los símbolos del uniforme escolar requerido que incluyen camisa, pantalón, corbata y falda de colores específicos, medias y zapatos.
El documento habla sobre los códigos binarios y su uso en computadoras. Explica que los códigos binarios usan los dígitos 0 y 1 para representar texto e instrucciones. Luego describe algunas características de los códigos binarios como la ponderación, distancia, continuidad y autocomplementariedad. También menciona brevemente los códigos ASCII y cómo las computadoras usan números para representar caracteres.
Xavier Prado es un redactor senior especializado en publicidad interactiva con más de 15 años de experiencia. Ha trabajado como director creativo y redactor en varias agencias de publicidad. Cuenta con una maestría en estrategia y creatividad interactiva y licenciatura en publicidad. Ha liderado varios proyectos digitales exitosos para marcas.
Este documento presenta un curso de especialización en sostenibilidad en urbanismo, rehabilitación y edificación ofrecido por la Universidad de Deusto. El curso consta de 5 módulos que cubren temas como sostenibilidad en arquitectura y urbanismo, rehabilitación y gestión urbana sostenible, rehabilitación sostenible en la edificación e integración de energías renovables. El curso está dirigido a profesionales del sector de la construcción y se evalúa a través de trabajos prácticos y una prueba final
Este documento describe la protección jurídica del software en Argentina. Explica que inicialmente el software no estaba protegido explícitamente pero que luego leyes como la 25.036 de 1998 lo incluyeron explícitamente. También describe el proceso de registro del software, ya sea para obras inéditas o publicadas, y los efectos que tiene el registro como establecer los derechos de autor y presunciones sobre la autoría.
El documento describe diferentes modalidades de transmisión de datos en una red interna. Estas incluyen transmisión analógica, digital, paralela y en serie. También describe componentes clave de sistemas de comunicación como emisores, receptores y canales, así como modos de transmisión como conexiones simples, semidúplex y dúplex totales.
Este documento trata sobre la seguridad informática. Define la seguridad informática y malware, y describe diferentes tipos de seguridad activa y pasiva, así como varios tipos de malware como virus, gusanos y troyanos. También explica algunos softwares de seguridad comunes como antivirus, cortafuegos y antiespías.
These are the slides from the .NET Summit 2016 in Munich where I talked about the .NET Compiler Platform and how it can help to solve developers day-to-day challenges directly where they work - the IDE.
At the very last slide, you can find an overview, the descriptions and links to the code of the discussed examples. Everything is at GitHub on my account. :)
#SpeakRoslyn - Die Microsoft .NET Compiler PlattformRobin Sedlaczek
This are the slides from my talk about the Microsoft .NET Compiler Platform. I traveled around the .NET User Groups in Germany and showed them the .NET Compiler Platform aka Project Roslyn and how Visual Studio 2015 was partly reimplemented to make use of Roslyn.
Scala : Monads for the Pragmatic Programmer , Composition with Stackable TraitsAndreas Neumann
Der Workshop bietet einen Überblick über diverese Neuerungen in Scala wie Future- und Try- Monaden und zeigt wie man mit Stackable Traits composition realisiern kann. Es ahndelt sich um einen Workshop mit Live-Coding-Teil Im Detal werden folgende Themen behandelt:
Was ist eine Monade, was für Vorteile bringt es für Entwickler das Konzept zu kennen
map, flatMap, filter und for-Comprehensions
Monaden in Scala:
Option-Monade
Either-Monade
Try (Monadenartig)
Future
Composition mit Stackable Traits
Beispiel zur Dispatch Library (kurz)
Specs 2 : Acceptance-Test-Notation
Der erste Workshop-Teil unserer JavaScript Task Force bei mindmatters in Hamburg.
Es wird zunächst ein etwas weiter gefasster Ausblick geworfen auf die aktuelle Bedeutung von JavaScript in der Webentwicklung.
Die zweite Hälfte der Präsentation steigt in den technischen Aspekt des Workshops ein, indem sie typische Stolpersteine in JavaScript sowie das Code-Quality-Tool JSLint vorstellt.
Perl - die Taschenkettensäge unter den Programmiersprachen - Vortrag 2003Brigitte Jellinek
Vorstellung der Programmiersprache Perl auf drei Ebenen: für Programmier-Anfänger, für Fortgechrittene und für Profis. inkl. Buchtipps zu Perl.
Ein Vortrag den ich ursprünglich am Chaos Communication Congress 2000 in Berlin gehalten habe, hier in der Version von 2003.
Vortrag: Robin Sedlaczek (ca. 90 Minuten)
„#SpeakRoslyn – Die Microsoft .NET Compiler Platform”
Mit der .NET Compiler Platform, auch bekannt unter dem Namen „Roslyn“, öffnet Microsoft seine Compiler für C# und VB.NET. „Öffnen“ bedeutet aber nicht nur, dass der Quellcode auf GitHub zur Verfügung gestellt und das Projekt in einem Open-Source-Umfeld entwickelt wird. Vielmehr bricht der Softwarehersteller die Blackbox der Sprachübersetzer auf und erlaubt den Zugriff auf alle Ausgaben der Kompilierphase. Von der Syntaxanalyse bis zur Codegenerierung – alle Vorgänge werden sichtbar. Entwicklern wird es damit ermöglicht, die Ergebnisse der einzelnen Phasen für sich zu nutzen.
Doch was genau stellen Softwareentwickler damit an? Welche Möglichkeiten bietet Roslyn? Der Vortrag richtet sich an Einsteiger und Interessierte. Es werden die Grundlagen des Compilerbaus vermittelt und anschließend gezeigt, wie die APIs von Roslyn aufgebaut sind. Anhand der Implementierung eines Code-Fixes für Visual Studio soll verdeutlicht werden, wozu Roslyn benutzt werden kann.
Dev Day 2019: Mirko Zeibig – "Hallo " <> "Elixir"DevDay Dresden
Seit Prozessoren nicht mehr schneller sondern nur noch mehr werden, werden uns häufig Konzepte aus der Welt der funktionalen Programmierung als Lösung versprochen. Aber wer hat schon Lust, Quellcode zu schreiben, dessen zweite Hälfte aus schließenden Klammern besteht?
Funktional programmieren aber mit modernem Syntax und solidem Unterbau. Das verspricht die Programmiersprache Elixir.
Dieser Vortrag wird zum einen die Grundlagen der Sprache vorstellen und wo vorhanden Parallelen zum Java-Umfeld aufzeigen.
Zum anderen wird gezeigt, warum Anwendungen auf Basis von Elixir die Bezeichnungen „Serverless“ und „Microservices“ eher verdienen als andere.
QAtalk, Dezember 2019, QAware München: Vortrag von Harald Störrle (@stoerrle, Senior IT-Berater bei QAware)
=== Dokument bitte herunterladen, falls unscharf! ===
Im logisch-relationalen Programmierparadigma werden Programme nicht als Befehlsfolgen oder geschachtelte Funktionen ausgedrückt, sondern als Menge von logischen Schlussregeln. Der paradigmatische Vertreter des logisch-deklarativen Programmierstils ist PROLOG. Diese Sprache ist aus drei Gründen interessant.
• Zum einen ist das logisch-relationale Programmierparadigma fundamental anders und sehr eigen, was zur Reflektion über die persönlichen Programmiergewohnheiten anregt.
• Außerdem taucht der Stil seit Jahrzehnten immer wieder unvermutet an den verschiedensten Stellen auf, daher sollte jeder Programmierer (und jede Programmiererin) diesen Stil zumindest kennen, besser noch: beherrschen.
• Zum anderen bietet die Programmiersprache PROLOG einige überraschende und ungewöhnliche Features, die sie zur stilbildenden KI-Programmiersprache gemacht haben (neben Lisp, und neuerdings Python).
Daher soll es heute eine kleine Einführung in die Programmierpraxis mit PROLOG geben.
Mit Java 8 haben endlich Lambdas in den Sprachumfang von Java Einzug gehalten. Mittels Lambdas lassen sich viele Probleme kurz und prägnant ausdrücken. Vorliegende Auskopplung aus Handouts zur Vorlesung Programmieren I führt Lambdas und Streams ein und erläutert den Einsatz an vielen kleineren Beispielen.
der aktuelle Stand Perl 5.20 an features und Kultur: beeinflusst von Perl 6 wird an den wesentlichen Stellen aufgeräumt: dies war das Update für den Linuxtag in Chemnitz März 2015
GE_: mein perl_Kurs fuer empfaengern mit empfeangerinnen schritt 2° vol.II.
vi ringrazio ed buon LaVOrO
Dott(2°).Ing.Arch. giovanni Colombo A1360 Ord.Ing.PG_I_1995 09171 Arch.kammer B_de_2003_2011
Go ist die Sprache Nummer 1 für cloudnative Entwicklung. Der Beweis: 19 von 25 Projekten der Cloud Native Computing Foundation im höchsten Reifegrad nutzen Go, darunter Kubernetes und Docker. Aber was macht Go interessant für Java oder .NET-Entwickler? Go ist durch und durch auf Nebenläufigkeit und Parallelisierung ausgelegt. Außerdem hat Go ein statisches Typsystem, eine moderne, mächtige Standardbibliothek und ist rasend schnell. Aber vor allem: Go macht Spaß. Mit einfachen praktischen Beispielen lernt ihr mit Go produktiv zu entwickeln. Wir beginnen mit dem Hello World. Dann ein kleines Kommandozeilen Tool und eine einfache Webanwendung. Dazu nutzen wir überwiegend die Standardbibliothek von Go. Ihr lernt wesentliche Konzepte von Go wie Interfaces, Goroutinen und Channels kennen. Zur Entwicklung nutzen wir die Go-Tools und eine moderne Entwicklungsumgebung. Nach unserem Workshop könnt ihr erste eigene Go-Anwendungen entwickeln. Und ihr seid bereit die nächsten Schritte mit Go zu gehen. Go ist eine Sprache für Macher. Also lasst uns machen!
Ähnlich wie Von Automaten zu Programmen–Parsergeneratoren und Attributgrammatiken (20)
Mathematikunterricht in 1zu1 Ausstattungen.pptxFlippedMathe
Wie geht guter Mathematikunterricht? Und jetzt auch noch mit Tablet/Laptop? In dieser Fortbildung soll es genau darum gehen.
Sebastian Schmidt kennt vielleicht nicht Ihre persönliche Antwort auf guten (digitalen) Mathematikunterricht, aber er hat seit 2013 versucht, mit digitalen Hilfsmitteln seinen Unterricht kompetenzorientierter zu gestalten. Die Digitalisierung von Unterricht hat immer die Problematik, das Lernen der Schülerinnen und Schülern aus dem Fokus zu verlieren. Diese sollen digital mündig werden und gleichzeitig Mathematik besser verstehen.
In dieser eSession werden zahlreiche Methoden, Konzepte und auch Tools vorgestellt, die im Mathematikunterricht des Referenten erfolgreich eingesetzt werden konnten. Nicht alles kann am nächsten Tag im Unterricht eingesetzt werden, aber man erhält einen Überblick, was möglich ist. Sie entscheiden dann selbst, worauf Sie Ihren Fokus legen und wie Sie selbst in die 1:1-Ausstattung starten.
Lassen Sie sich überraschen und nehmen Sie mit, was für Sie sinnvoll erscheint. Auf der Homepage von Sebastian Schmidt gibt es neben Links und Materialien zur Fortbildungen auch Workshops fürs eigene Ausprobieren. https://www.flippedmathe.de/fortbildung/mathe-ws/
Teaching and Learning Experience Design – der Ruf nach besserer Lehre: aber wie?Isa Jahnke
Der Ruf danach, dass es bessere Lehre geben muss oder das Lehre verbessert werden sollte, ist nicht neu. Es gibt auch schon seit längerer Zeit Rufe danach, dass Lehre der Forschung in Universitäten gleichgestellt werden soll. (Und in den letzten Jahren ist in Deutschland auch einiges an positiven Entwicklungen geschehen, z.B. durch die Aktivitäten des Stifterverbands). Wie kann die Verbesserung der Lehre weitergehen? Fehlt etwas in dieser Entwicklung? Ja, sagt dieser Beitrag, der zum Nachdenken und Diskutieren anregen soll. In diesem Beitrag wird ein forschungsbasierter Ansatz zur Diskussion gestellt. Es wird argumentiert, dass Lehre nur dann besser wird, wenn es mit den Prinzipen der Wissenschaft und Forschung angegangen wird (d.h. gestalten, Daten erheben, auswerten, verbessern). Es benötigt neue Verhaltensregeln oder -prinzipien bei der Gestaltung von Lehrveranstaltungen. Das bedeutet zum Beispiel das Prinzipien der Evidenzbasierung und wissenschaftliche Herangehensweisen im Lehr-Lerndesign als zentrales Fundament etabliert werden sollte. Evidenzbasierung hier meint, folgt man der Logik der Forschung, dass Lehrveranstaltungen als Intervention verstanden werden. Mit dieser Intervention werden Studierende befähigt, bestimmte vorab festgelegte Kompetenzen zu entwickeln. Und die Frage, die sich bei jeder Lehr-Lernveranstaltung dann stellt, ist, ob diese Objectives bzw. Learning Outcomes auch erreicht wurden. Klar ist, dass die subjektive Lehrevaluation der Studierenden oder auch die Notengebnung nicht ausreichen, um diese Frage zu beantworten. Hierfür gibt es eine Reihe von Methoden, die genutzt werden können, z.B. aus dem Bereich des User- / Learning Experience Design. Diese Methoden umfassen unter anderem Usability-Tests, Learner Experience Studies, Pre-/Post-Tests, und Follow-up Interviews. Diese können zur Gestaltung und Erfassung von effektiven, effizienten und ansprechenden digitalen Lerndesigns verwendet (Reigeluth 1983, Honebein & Reigeluth, 2022).
Der Beitrag will die Entwicklung zur Verbesserung von Lehre weiter pushen. Neue Ideen in die Bewegung bringen. Als Gründungsvizepräsidentin der UTN hab ich die Chance, hier ein neues Fundament für eine gesamte Uni zu legen. Wird das Gelingen? Ist dieser Ansatz, den ich hier vorstelle, eine erfolgsversprechende Option dafür? Hier können sich die TeilnehmerInnen an dieser Entwicklung beteiligen.
22. 41 }
‘0’–‘9’
‘ -’
start I F ‘0’–‘9’ R
‘0’–‘9’
Ganzzahlen in Java
Endlicher Automat für den Ganzzahlparser in Long.parseLong
18
23. 1 public static long parseLong(String s, int radix) throws NumberFormatException
{
3 if (s == null) throw new NumberFormatException(quot;nullquot;);
[...]
5 int max = s.length();
[...]
7 // State 1: Treat the sign
if (s.charAt(0) == ’-’) {
9 negative = true;
limit = Long.MIN_VALUE;
11 i++;
} else
13 limit = -Long.MAX_VALUE;
15 // State 2: Treat first digit
if (i < max) {
17 digit = Character.digit(s.charAt(i++),radix);
if (digit < 0) // Not a digit
19 throw NumberFormatException.forInputString(s);
else
21 result = -digit;
}
23
// State 3: Treat all other digits
19
25 while (i < max) {
digit = Character.digit(s.charAt(i++),radix);
24. 21 result = -digit;
}
23
// State 3: Treat all other digits
25 while (i < max) {
digit = Character.digit(s.charAt(i++),radix);
27 if (digit < 0) // Not a digit
throw NumberFormatException.forInputString(s);
29 result *= radix;
// Check if out-of-bounds [...]
31 result -= digit;
}
33 if (negative) {
if (i > 1)
35 return result;
else /* Only got quot;-quot; */
37 throw NumberFormatException.forInputString(s);
} else
39 return -result;
41 }
‘0’–‘9’
‘ -’
start I F ‘0’–‘9’ R
20
‘0’–‘9’
26. en, die unser Parser erkennen soll:
2.1 Regulärer Ausdruck für Gleitpunktzahlen
(‘Für -’)? digit+ (‘.’ digit+)? ((‘e’|‘E’) digit+)? Aus
+’|‘ unser Beispiel beginnen wir mit einem regulären
Gleitpunktzahlen, die unser Parser erkennen soll:
0’ | ‘1’ | ‘2’ | ‘3’ | ‘4’ | ‘5(‘+’|‘-’ | ‘7’ | ‘8’.|’ ‘9’
’ | ‘6 ’)? digit+ (‘ digit+)? ((‘e’|‘E’) digit
digit digit*
digit := ‘0’ | ‘1’ | ‘2’ | ‘3’ | ‘4’ | ‘5’ | ‘6’ | ‘7’ | ‘8’ | ‘9’
digit+ := digit digit*
tion ist fast wie in den Übungen behandelt, allerdin
omma-Anteil wegfallenfast wie in den der Exponent). a
Die Spezifikation ist kann (wie Übungen behandelt,
dass der Nachkomma-Anteil wegfallen kann (wie der Expon
Gleitpunktzahlen in Java
utomat für Gleitpunktzahlen
2.2 Endlicher Automat für Gleitpunktzahlen
Spezifikation: Regulärer Ausdruck
22
ache können wir durch folgenden Automaten besch
Die gleiche Sprache können wir durch folgenden Automate
27. ‘+’, ‘-’
start S s,d Sd
‘0’–‘9’ ‘.’ ‘0’–‘9’
‘0’–‘9’
S d ,p,e ‘0’–‘9’ Fd ‘0’–‘9’ F d ,e
‘e’, ‘E’ ‘e’, ‘E’
E s,d
‘0’–‘9’
‘+’, ‘-’
Ed ‘0’–‘9’ E d ,#
‘0’–‘9’ 23
Der Automat verwendet die folgenden Zustände, benannt nach d
28. gibt. Dabei nennen wir für eine Gleitpunktzahl s. f · 10 : s den significand (oder
Vorkomma-Anteil der Mantisse), f die fraction (oder Nachkomma-Anteil der Man-
tisse), und e den exponent.
Zustand Teil der Zahl Nachfolgerzeichen Beschreibung
S s,d significand Ziffer (d ) oder Vorzeichen (s ) Anfangszustand, erkennt optionales Vor-
zeichen
Sd –”– Ziffer stellt sicher, dass zumindest eine Ziffer im
significand vorkommt
S d , f ,e –”– Ziffer, Punkt (p ) oder e erkennt beliebige Folgen von Ziffern, fährt
mit Erkennung von fraction oder expo-
nent fort, Endzustand
Fd fraction Ziffer stellt sicher, dass zumindest eine Ziffer in
fraction vorkommt
F d ,e –”– Ziffer or e erkennt beliebige Folgen von Ziffern, fährt
mit Erkennung von exponent fort, Endzu-
stand
E s,d exponent Ziffer oder Vorzeichen Ziffer oder Vorzeichen als Beginn des ex-
ponent
Ed –”– digit stellt sicher, dass zumindest eine Ziffer in
exponent vorkommt
Ed –”– digit erkennt beliebige Folgen von Ziffern, End-
zustand
24
29. Implementierung Endlicher Automaten
Ansätze …
Implicit state: wie Long.parseLong(); Zustand implizit
Bereich im Programm identifiziert den aktuellen Zustand (PC)
für einfach, im wesentlichen sequentielle Automaten geeignet
Loop-and-switch:
Schleife über Eingabe + goto/switch je nach akt. Zustand und Symbol
effizient nur wenn Sprünge berechnet werden können
typisch für komplexere Automaten mit oft wiederkehrenden Zuständen
Loop-and-lookup: Schleife + Nachschlagen in Tabellenrepr. von δ
Zeilen: Zustände, Spalten: Eingabesymbole, Zelleninhalt: Folgezustand
Zeit-effizient auf Kosten von Speicher, nur bei kleinem Eingabealphabet
z.B. reguläre Ausdrücke über Basispaarsequenzen (nur A, T, G, C).
25
30. Implementierung Endlicher Automaten
Umgebung für FP-Parser …
FPParser: abstrakte Oberklasse für alle Floating-Point-Parser
Attribute & Methoden zur Verwaltung & Berechnung der FP-Zahl
FPPaser.FPNumberPart: hält ganzzahligen Anteil einer FP-Zahl
significand (Vorkomma-Anteil), fraction (Nachkomma-Antail), exponent
#parse(char): Transition & Berechnung des Automaten
bei Eingabe eines einzelnen Zeichens
#parse(String): Schleife über die Eingabe
für jedes Zeichen wird #parse(char) aufgerufen
26
31. Implementierung Endlicher Automaten
Umgebung für FP-Parser …
FPParser: abstrakte Oberklasse für alle Floating-Point-Parser
Attribute & Methoden zur Verwaltung & Berechnung der FP-Zahl
FPPaser.FPNumberPart: hält ganzzahligen Anteil einer FP-Zahl
significand (Vorkomma-Anteil), fraction (Nachkomma-Antail), exponent
#parse(char): Transition & Berechnung des Automaten
bei Eingabe eines einzelnen Zeichens
#parse(String): Schleife über die Eingabe
für jedes Zeichen wird #parse(char) aufgerufen
FPParser
26
32. einer Ziffer bleiben wir im gleichen Zustand und fügen die Ziffer zur aktu-
ellen Repräsentation des significand hinzu. Bei einem Punkt gehen wir in
den Zustand F d , also erwarten die erste Ziffer der fraction (würden wir hier
Implementierung Endlicher Automaten
in F d ,e übergehen, wären auch Zahlen der Form 12.E10 erlaubt). Bei einem
e oder E gehen wir in Zustand E s,d (STATE_Exponent). In den beiden letzten
Loop-and-Switch …
Fällen dienen die Zeichen nur als Trennzeichen und werden nicht zur aktu-
ellen Repräsentation hinzugefügt.
1 case STATE_SignifDigit_Fraction_Exponent:
if(Character.isDigit(c)) {
3 state = STATE_SignifDigit_Fraction_Exponent;
significand.addDigit(c);
5 }
else if(c == ’.’) {
7 state = STATE_FractionDigit;
}
9 else if(c == ’e’ || c == ’E’) {
state = STATE_Exponent;
11 }
else state = STATE_Failure;
13 break;
Loop-and-Lookup: realisiert in MatrixFPParser. Die Idee von loop-and-lookup Im-
plementierungen ist, in der Schleife über die Eingabezeichen mit Hilfe ei- 27
ner (konstanten) Lookup-Tabelle den Folgezustand (und eventuelle Berech-
33. einer Ziffer bleiben wir im gleichen Zustand und fügen die Ziffer zur aktu-
ellen Repräsentation des significand hinzu. Bei einem Punkt gehen wir in
den Zustand F d , also erwarten die erste Ziffer der fraction (würden wir hier
Implementierung Endlicher Automaten
in F d ,e übergehen, wären auch Zahlen der Form 12.E10 erlaubt). Bei einem
e oder E gehen wir in Zustand E s,d (STATE_Exponent). In den beiden letzten
Loop-and-Switch …
Fällen dienen die Zeichen nur als Trennzeichen und werden nicht zur aktu-
ellen Repräsentation hinzugefügt.
1 case STATE_SignifDigit_Fraction_Exponent:
if(Character.isDigit(c)) {
3 state = STATE_SignifDigit_Fraction_Exponent;
significand.addDigit(c);
5 }
else if(c == ’.’) {
7 state = STATE_FractionDigit;
}
9 else if(c == ’e’ || c == ’E’) {
state = STATE_Exponent;
11 }
else state = STATE_Failure;
13 break;
PlainFPParser
Loop-and-Lookup: realisiert in MatrixFPParser. Die Idee von loop-and-lookup Im-
plementierungen ist, in der Schleife über die Eingabezeichen mit Hilfe ei- 27
ner (konstanten) Lookup-Tabelle den Folgezustand (und eventuelle Berech-
36. nungsschritte) zu spezifizieren. In der Lookup-Tabelle sind den Zuständen
Zeilen, den Eingabezeichen Spalten zugeordnet.
Implementierung Endlicher Automaten
Die Lookup-Tabelle findet sich in MatrixFPParser#stateMatrix und ist eine
ziemlich direkte Umsetzung der δ Übergangsfunktion des Automaten. Für
Loop-and-Lookup …
den gleichen Zustand wie oben ergibt sich z.B. folgender Eintrag in der Ma-
trix:
1 // STATE_SignifDigit_Fraction_Exponent
{ // (STATE_SignifDigit_Fraction_Exponent, SCLASS_Digit)
3 new DigitEffect(STATE_SignifDigit_Fraction_Exponent,←
significand),
// (STATE_SignifDigit_Fraction_Exponent, SCLASS_Sign)
5 new Effect(STATE_Failure, significand),
// (STATE_SignifDigit_Fraction_Exponent, SCLASS_Expn)
7 new Effect(STATE_Exponent, significand),
// (STATE_Initial, SCLASS_Period)
9 new Effect(STATE_FractionDigit, significand),
// (STATE_SignifDigit_Fraction_Exponent, SCLASS_Rest)
11 new Effect(STATE_Failure, significand)
},
In jeder Zelle der Lookup-Tabelle findet sich ein Effect Objekt, dass
den nächsten Zustand und die auszuführenden Berechnungsschritte
enthält. Um die Berechnungsschritte zu paramerterisieren verwendet 29
MatrixFPParser Funktionsobjekte (wo Sprachen wie C++ Funktionspointer
37. nungsschritte) zu spezifizieren. In der Lookup-Tabelle sind den Zuständen
Zeilen, den Eingabezeichen Spalten zugeordnet.
Implementierung Endlicher Automaten
Die Lookup-Tabelle findet sich in MatrixFPParser#stateMatrix und ist eine
ziemlich direkte Umsetzung der δ Übergangsfunktion des Automaten. Für
Loop-and-Lookup …
den gleichen Zustand wie oben ergibt sich z.B. folgender Eintrag in der Ma-
trix:
1 // STATE_SignifDigit_Fraction_Exponent
{ // (STATE_SignifDigit_Fraction_Exponent, SCLASS_Digit)
3 new DigitEffect(STATE_SignifDigit_Fraction_Exponent,←
significand),
// (STATE_SignifDigit_Fraction_Exponent, SCLASS_Sign)
5 new Effect(STATE_Failure, significand),
// (STATE_SignifDigit_Fraction_Exponent, SCLASS_Expn)
7 new Effect(STATE_Exponent, significand),
// (STATE_Initial, SCLASS_Period)
9 new Effect(STATE_FractionDigit, significand),
// (STATE_SignifDigit_Fraction_Exponent, SCLASS_Rest)
11 new Effect(STATE_Failure, significand)
},
In jeder Zelle der Lookup-Tabelle findet sich MatrixFPParser
ein Effect Objekt, dass
den nächsten Zustand und die auszuführenden Berechnungsschritte
enthält. Um die Berechnungsschritte zu paramerterisieren verwendet 29
MatrixFPParser Funktionsobjekte (wo Sprachen wie C++ Funktionspointer
49. 17 ;
19 atom
Arithmetik & Parsergeneratoren
: INT
|ID
Lexer-Regeln der Grammatik
21
|’(’ expr ’)’
23 ;
25 /*------------------------------------------------------------------
* LEXER RULES
27 *------------------------------------------------------------------*/
29 ID : (’a’..’z’|’A’..’Z’)+ ;
INT : ’0’..’9’+ ;
31 NEWLINE:’r’? ’n’ ;
WS : (’ ’|’t’)+ {skip();} ;
Was ist die Aufgabe eines Lexers?
Beispiel: -666.797E-14
Zum Ausprobieren der Parser einfach folgendem Rezept folgen:
41
• FPParser.jar herunterladen und mit
50. direkte Ausgaben,
Fehler
Lexer Parser
Character Token Abstract
Strom Strom Syntax Tree
(auch Scanner,
Tokenizer)
Struktur eines ANTLR-Parser
Lexer, Parser, AST, Token vs. Character-Strom
42
51. w i d t h = 2 0 0 ; n Characters
ID = INT ; Tokens
WS WS WS
Von Characters zu Tokens
Aufgabe des Lexers
43
52. void multExpr() {
try {
atom();
while( <<next input symbol is '*' >> ) {
match('*');
atom();
}
}
[... error handling]
}
void atom() {
try {
int alt=3;
switch (<< next input symbol >>) {
case INT: alt = 1; break;
case ID: alt = 2; break;
case '(': alt = 3; break;
default: [error]
}
switch(alt){
case 1: match(INT); break;
case 2: match(ID); break;
case 3: match('('); expr(); match(')'); break;
}
Parser.java
Was hinten herauskommt …
}
[... error handling]
}
44
55. grammar IntExpr_Var;
options {
language = Java;
superClass = RunnableParser; }
@lexer::header{
package de.lmu.ifi.pms.parsergenerators; }
@header{
package de.lmu.ifi.pms.parsergenerators;
import java.util.Set;
import java.util.HashSet; }
@members {
/** Set for maintaining already declared variables. */
Set declaredVariables = new HashSet();
public static RunnableParser getParserInstance(ANTLRStringStream stream){
[...]
}
public void run(ASTProcessor... processors){
try {
Prolog
prog();
} catch (Exception e) [...]
}
} 46
56. prog: stat+ ;
stat: // Semantic action for printing out the value returned by the evaluation of each expression
expr NEWLINE
{ System.out.println(quot;Expression in line quot; +
input.get(input.index()-1).getLine() + quot;: quot; + $expr.value);}
// Semantic action for constructing the set of declared variables.
| ID '=' expr NEWLINE
{ varValues.put($ID.text, new Integer($expr.value)); }
| NEWLINE
;
// All rules of the grammar get a return value, the computed value of their matching expression
expr returns [int value]
: e=multExpr {$value = $e.value;}
// We need to distinguish addition and subtraction
( '+' e=multExpr {$value += $e.value;}
| '-' e=multExpr {$value -= $e.value;} )*
;
multExpr returns [int value]
: e=atom {$value = $e.value;} ('*' e=atom {$value *= $e.value;})*
;
atom returns [int value]
: INT {$value = Integer.parseInt($INT.text);}
| ID
{ Integer v = varValues.get($ID.text);
if ( v!=null ) $value = v.intValue();
else throw new FailedPredicateException(input,
quot;atomquot;, quot;undeclared variable quot;+$ID.text); }
| '(' expr ')' {$value = $expr.value;}
47
;
57. prog: stat+ ;
stat: // Semantic action for printing out the value returned by the evaluation of each expression
expr NEWLINE
{ System.out.println(quot;Expression in line quot; +
input.get(input.index()-1).getLine() + quot;: quot; + $expr.value);}
// Semantic action for constructing the set of declared variables.
| ID '=' expr NEWLINE
{ varValues.put($ID.text, new Integer($expr.value)); }
| NEWLINE
;
// All rules of the grammar get a return value, the computed value of their matching expression
expr returns [int value]
: e=multExpr {$value = $e.value;}
// We need to distinguish addition and subtraction
( '+' e=multExpr {$value += $e.value;}
| '-' e=multExpr {$value -= $e.value;} )*
;
multExpr returns [int value]
: e=atom {$value = $e.value;} ('*' e=atom {$value *= $e.value;})*
;
atom returns [int value]
: INT {$value = Integer.parseInt($INT.text);}
| ID
{ Integer v = varValues.get($ID.text);
if ( v!=null ) $value = v.intValue();
else throw new FailedPredicateException(input,
quot;atomquot;, quot;undeclared variable quot;+$ID.text); }
| '(' expr ')' {$value = $expr.value;}
47
;
58. public int expr() {
int value = 0; // return value
int e = 0;
try {
e = multExpr();
value = e;
loop3: while(true) {
int alt = 3;
if (<<next input symbol is '+'>>) alt = 1;
else if (<<next input symbol is '-'>>) alt = 2;
switch(alt) {
case 1: match('+');
e = multExpr();
value += e;
break;
case 2: [...]
}
}
}
}
[...] Parser + Aktionen
Was hinten herauskommt …
48
60. Jenseits von Syntax
Semantische Analyse
Trennung syntaktische / semantische Analyse
effiziente, kontext-freie Parser für syntaktische Analyse
Semantische Analyse
volle Programmiersprache mittels Traversierung/Transformation des AST
aber: schwer, oft weitgehend unabhängig von Sprache, ineffizient
Attribute Grammars (Attributgrammatiken), SDDs
Formalismus zur Einbettung der semantischen in die syntaktische Analyse
Anreicherung des ASTs durch “semantische” Attribute
in der Praxis: oft auch Seiteneffekte
50
64. /quot;0quot;%1quot;%(2)34$05
9 + # 9'+F,(-7%,8'D%8%7,9
F'.,-(%,.8-),0-6,)F%,>'8
9! A 9H '))6*D3)%
# L-)%,)F%,7%/%(7%(+*%.
*()B 5 J 9< + K
9@ A
9B
*()H 2 *()< 3
Prof. Aiken CS 143 Lecture 6 HI
52
65. /quot;0quot;%1quot;%(2)34$05
9 + # 9'+F,(-7%,8'D%8%7,9
F'.,-(%,.8-),0-6,)F%,>'8
9! A 9H '))6*D3)%
# L-)%,)F%,7%/%(7%(+*%.
*()B 5 J 9< + K
/quot;0quot;%1quot;%(2)34$05
9@ A
9B 9
+-&/3)%7,'0)%6,'88,*)., 10
%(7%(+1,N6'/F,F'>%,D%%(,
*() 2 H *()< 3 9! 5 A 9H 5
)6*D3)%.,+'(,D%,+-&/3)%7, Prof. Aiken CS 143 Lecture 6 HI
*()B 5 J 9< 5 K
QF%(,)F%6%,'6%,(-,+1+8%. 9@ 2 A
9B 3
D3)%.,'6%,(-),8%N'8
*()H 2 *()< 3
52
143 Lecture 6 H! Prof. Aiken CS 143 Lecture 6
66. Jenseits von Syntax
Attribute Grammars
Attribute grammar :=
kontextfreie Grammatik mit Attributen und Regeln
Attribute zu Symbolen, Regeln zu Produktionen
S.a bezeichnet das Attribut ‘a’ des Symbols ‘S’
Synthetisiertes Attribut (“Rückgabewerte) a von S
definiert nur unter Verwendung von Attributen von S und Kinder von S
Vererbtes Attribut (“Parameter”) b von S
definiert nur unter Verwendung von Attributen von S, des Vaters von S
und der Geschwister von S
53
67. Jenseits von Syntax
Attribute Grammars
Ergebnis: Gleichungssystem
Auswertungsordnung ist nicht fixiert
e.g., E3.val = E4.val + E5.val
E4.val und E5.val nötig um E3.val zu berechnen (dependency)
aber: ob erst E4.val oder E5.val berechnet wird ist offen
Parser muß Auswertungsordnung festlegen
Problem: zyklische Abhängigkeiten
EXPTIME: für eine gegebene Grammatik feststellen, ob Abhängigkeiten
für alle Parsebäume zyklenfrei sind.
daher: Einschränkung von Attribute Grammars
54
68. Jenseits von Syntax
Attribute Grammars
S-attributed attribute grammar
entählt ausschließlich synthetisierte Attribute
L-attributed attribute grammar: alle Attribute entweder
synthetisiert oder
vererbt, aber dann, für Regel A ::= X1 X2 … Xn
Berechnung von Xi.a nur durch
vererbte Attribute von A oder
(synthetisierte oder vererbte) Attribute von Xj fuer j < i oder
(synthetisierte oder vererbte) Attribute von Xi selbst falls nicht abhängig von a
verwendet vor allem in Recursive Descent Parsern wie ANTLR
55
72. Zusammenfassung
Parsergeneratoren
1. Implementierung von Endlichen Automaten
loop-and-switch, loop-and-lookup, Lexer,
Automatenbibliotheken
manuelle Implementierung oft in Bibliotheken und bei zeitkritischem
Parsing (Basispaarsequenzen) verwendet
Lexer erlauben auch komplexe endliche Automaten
ohne signifikanten Effizienzverlust
Automatenbibliotheken
ineffizienter als Lexer oder manuelle Implementierung
aber: Konstruktion und Manipulation der Automaten zur Laufzeit möglich
58
73. Zusammenfassung
Parsergeneratoren
2. Implementierung von Kellerautomaten
Parsergeneratoren
manuelle Implementierung meist zu aufwendig
Parsergeneratoren erzeugen Lexer und Parser
Mehr als kontextfreie Sprachen dank semantischer Aktionen
kontext-sensitive Eigenschaften “von Hand” programmieren
Recursive-descent oder LL(k)/LL(*) Parser wie ANTLR
einfach zu lesender Code, leichte manuelle Anpassung
Andere verbreitete Ansätze: LR, LALR, Left-Corner, Earley
59
74. Zusammenfassung
Parsergeneratoren
Beispielprogramme + Dokumentation
im Laufe der Woche auf der Webseite
Mehr Details zu Attributgrammatiken in den Übungen
Kapitel 5, Drachenbuch (“Compilers …”, Aho et al., 2007)
Selber ausprobieren!
60