1 Sammanfattning. Utökning av programmeringsspråk(plex-c) för telekommunikation



Relevanta dokument
Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Eclipse. Avsikt. Nu ska ett fönster liknande figuren till höger synas.

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

F4. programmeringsteknik och Matlab

NetBeans 7. Avsikt. Projektfönster

NetBeans 5.5. Avsikt. Projektfönster

Labb i Datorsystemteknik och programvaruteknik Programmering av kalkylator i Visual Basic

MÄLARDALENS HÖGSKOLA. CD5560 Formella språk, automater och beräkningsteori. Användarmanual. för simulatorn JFLAP

Klassdeklaration. Metoddeklaration. Parameteröverföring

Programmering i C++ Kompilering från kommandoraden

Program & programmering

Tentamen i TDP004 Objektorienterad Programmering Praktisk del

Inledning. Vad är ett datorprogram, egentligen? Olika språk. Problemlösning och algoritmer. 1DV433 Strukturerad programmering med C Mats Loock

Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten Programmering: att instruera en maskin att utföra en uppgift, kräver olika språk:

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p

Tentamen i TDP004 Objektorienterad Programmering Praktisk del

Imperativ programmering. Föreläsning 2

Programmerbar logik (PLD) Programmeringsspråket VHDL Kombinatoriska funktioner i VHDL för PLD Sekvensfunktioner i VHDL för PLD

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

Introduktion till programmering och Python Grundkurs i programmering med Python

TDP005 Projekt: Objektorienterat system

Software Technology. Josef Svenningsson

Uppgift 1 (grundläggande konstruktioner)

Introduktion till programmering SMD180. Föreläsning 2: Variabler, uttryck och satser

International Olympiad in Informatics July 2011, Pattaya City, Thailand Tävlingsuppgifter Dag 2 Svenska 1.3. Papegojor

Twincat: PLC Control

Backcode. Jonathan Crusoe TDP019 Projekt: Datorspråk Linköpings universitet

Bakgrund och motivation. Definition av algoritmer Beskrivningssätt Algoritmanalys. Algoritmer. Lars Larsson VT Lars Larsson Algoritmer 1

Program. Kapitel make Program Interpreterande och kompilerande program

Simulering med ModelSim En kort introduktion

Grundkurs i programmering - intro

Alla filer som bearbetar PHP script ska avslutas med ändelsen.php, exempelvis ska en indexsida till en hemsida heta index.php

Kompilatorer och interpretatorer

Programmering för språkteknologer I, VT2012. Rum

Föreläsning 2. Operativsystem och programmering

Tentamen i TDP004 Objektorienterad Programmering Praktisk del

GU / Chalmers Campus Lindholmen Tentamen Programutveckling LEU 482 / TIG167

Introduktion till programmering, hösten 2011

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Dependensregler - Lathund

Introduktion till MATLAB, med utgångspunkt från Ada

Föreläsning 4 IS1300 Inbyggda system

Forskning och utveckling inom språkteknologi Uppgift 3: Projektförslag Parallelliserad dependensparsning i CUDA

Prova på-laboration i Ada

Code-Lite tutorial ( /RoJ)

KTH STH TENTAMEN. HI1024:TEN2 - Praktisk tentamen Tid: 8-13, den 18 februari 2012

Föreläsning 3. Programmering, C och programmeringsmiljö

Lektion Java Grunder. Javas historia. Programmeringsspråket Java. Skillnaderna mellan Java och C++ JVM (Javas Virtuella Maskin)

kind spelling Scanning

TDIU01 (725G67) - Programmering i C++, grundkurs

Föreläsning 3: Booleans, if, switch

TENTAMEN OOP

lex källkod lex.l lexkompilator lex.yy.c C- kompilator lex.yy.c a.out sekvens av tokens a.out input specifikation av tokens mha reguljära uttryck

TDDD78, TDDE30, 729A Introduktion till Java -- för Pythonprogrammerare

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

1 Språket C Valet av språket C++ för kompendiet. 1.2 Språket. 1.3 Att programmera. 1.4 Hello World Börja programmera

VHDL och laborationer i digitalteknik

DIGITALTEKNIK. Laboration D172

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Simulering med ModelSim En kort introduktion

Objektorienterad programmering Föreläsning 2

std_logic & std_logic_vector

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6

Föreläsning 6: Introduktion av listor

OMTENTAMEN I PROGRAMSPRÅK -- DVG C kl. 08:15-13: 15

What Is Hyper-Threading and How Does It Improve Performance

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

Introduktion C-programmering

Introduktion till formella metoder Programmeringsmetodik 1. Inledning

Att komma igång. Föreläsning 1

Testning av program. Verklig modell för programutveckling

729G04 Programmering och diskret matematik. Python 2: Villkorssatser, sanningsvärden och logiska operatorer

Support Manual HoistLocatel Electronic Locks

Abstrakta Klasser 2. Kodning är bara en liten del i programvaruutvecklingen 6% 1% 6% Abstrakta Klasser - deklaration. Programutveckling sker i faser

GPT föreläsning 8. Förra veckan: Man kan ta tiden på en sorterad teckensträng Förra gången: Problemlösning på lägre nivå kan sortera funktioner

OOP Objekt-orienterad programmering

Datorlaboration 0, Programmering i C++ (EDA623)

F5: Högnivåprogrammering

Introduktion till programmering. Programspråk och paradigmer

Föreläsning 2 Programmeringsteknik och C DD1316. Programmering. Programspråk

F5: Högnivåprogrammering

Inledande programmering med C# (1DV402) Ditt första C#-program med Visual Studio

Boken?!?! Vad är ett program? Kompilerande-Interpreterande Programmeringsmiljö Hello World! Att programmera och ett enkelt program Variabler printf

z/os JCL och Utilities

C++ Slumptalsfunktioner + switch-satsen

Inledande programmering med C# (1DV402) Introduktion till C#

Logik och kontrollstrukturer

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018

Programsystemkonstruktion med C++: Övning 1. Karl Palmskog september 2010

Det finns många flaggor till g++,

Objektorientering i liten skala

Laboration D159. Sekvensnät beskrivna med VHDL och realiserade med PLD. Namn: Datum: Epostadr: Kurs:

729G75: Programmering och algoritmiskt tänkande. Tema 1. Föreläsning 1 Jody Foo

Introduktion till programmering SMD180. Föreläsning 1: Programmets väg

Designmönster, introduktion. Vad är det? Varför skall man använda mönster?

Sockets: server. with Ada.Command_Line; use Ada.Command_Line; with Ada.Exceptions; use Ada.Exceptions; with Ada.Text_IO; use Ada.

Digitalt lärande och programmering i klassrummet

Transkript:

2 Mälardalens högskola Rapport Institutionen för elektroteknik 2000-10-10 Examensarbete 10p, C-nivå Johnny Huss 660329-1037 Handledare på Ericsson Utvecklings AB: Robert Lindh Handledare på Mälardalens högskola: Peter Funk Utökning av programmeringsspråk(plex-c) för telekommunikation 1 Sammanfattning I AXE-växlar(digitala telefonväxlar) utnyttjas ett programmeringsspråk som heter PLEX. Det utvecklades på sjuttiotalet parallellt med introduktionen av AXE för att bli skräddarsytt för AXE-systemet. Unikt för PLEX är att språket har en händelsestyrd arkitektur. PLEX används idag på Ericsson för att programmera telekommunikationsutrustning. Detta examensarbete är utfört åt Ericsson Utvecklings AB där instruktioner till telefonväxlar ges. Vid programmering i PLEX beskrivs regelbundet en återstartsprocedur efter avbrott som för olika block i programmet ser snarlik ut. Idag arbetar programmerare i allt större utsträckning med att applicera redan använd kod vid nykonstruktion. Ett naturligt val kan tyckas, men pga snarlikhet i återstartskod, och i viss mån slarv, skapar detta problem och är en orsak till svårfunna felkällor. Kompileringen kan många gånger gå bra men funktionen blir inte den avsedda. Detta examensarbete har gått ut på att skapa en preprocessor som tar hand om en nyskapad återstartssats i språket, och utifrån denna genererar kompilerbar funktionsduglig kod. Den nya återstartssatsen är enkraftigförenkling, som på ett för programmeraren beskrivande sätt anger syftet med inmatade återstartsdirektiv. Tanken är att programmeraren istället för att använda "gammal" kod nyttjar den nyskapade satsen vid inmatningen av återstartskoden. Figure from ToolMaker Manual[2] ENTER STTOR WITH TCASE, TPHASE, TTYPE, CKEY; IF TTYPE /= 1 THEN CASE TPHASE IS WHEN 1 DO GOTO ABC10; <restart statement> ELSE WHEN 1 DO CASE TPHASE IS WHEN 100 DO DOA1000; FI; STTORRY) TBLOCKINFO = JJ00 (-) JJ888; SEND STTORRY WITH CKEY, TBLOCKINFO, 5, 1, 100, 255; EXIT; ENGLISH VERSION In AXE exchanges(digital telephone exchanges) a language called PLEX-C is used. It was developed in the seventies parallel with the AXE system. PLEX-C is used by Ericsson for programming telecommunication equipment such as AXE. The language has a unique event-steered architecture, and starting up the switch after a break involves a restart phase, which often involves performing rather similar funcionalities in different parts of the program. Programmers of today tend to work with older applications of written code and use it all over again, "the copy-paste way". A natural choice it seems, but due to similarity in the code mistakes is done and problems occur when running the program. The compilepart many times runs as it s supposed to do, but the functionality doesn t always measure up to the demands. This degree project has been to build a preprocessor which takes care of a new statement for handling restart in the language, and depending on inputs in that new statement write compilable PLEX-C code. The new statement is describing the purpose with the input in an instructive way, and the intention with the new statement is to make the programmer use the new statement instead of "old" code in the programming process.

3 4 INNEHÅLLSFÖRTECKNING 1 Sammanfattning 2 2 Inledning 4 2.1 Bakgrund 4 2.2 Problem 4 2.3 Exjobbsbeskrivning 5 2.4 Hjälpmedel vid problemlösning 5 3 Restart statement 6 3.1 Beskrivning av återstartskommandots olika delar 6 3.1.1 <restart statement> 6 3.1.2 <expression> 6 3.1.3 <restart action> 7 3.1.4 <case> 7 3.1.5 <phases> 7 3.1.6 <absolute phase> 7 3.1.7 <symbolic phase> 7 3.1.8 <statement block> <label> 7 3.2 Regler för implementering av nya återstartskoden 8 4 Preprocessorn 9 4.1 Handhavande preprocessorn 9 4.2 Exempel på utseende före körning i preprocessorn 10 4.3 Exempel på utseende efter körning i preprocessorn 11 5ToolMaker 13 5.1 ScannerMaker 13 5.2 ParserMaker 14 5.3 Övergripande beskrivningsfil för ToolMaker 15 5.4 Beskrivningsfil för felmeddelanden 15 6 Summering och slutsatser 15 Referenser 16 Bilagor 16 2 Inledning 2.1 Bakgrund Under sjuttiotalet då utvecklingen av Ericssons AXEväxlar(digitala telefonväxlar) pågick påbörjades samtidigt utvecklingen av ett programmeringsspråk som heter PLEX (Programming Languages for Exchanges). Unikt för PLEX är att språket har en händelsestyrd arkitektur [6] som är mycket väl lämpad för telekommunikation. Programmeringsspråket är alltså designat helt och hållet för telekommunikationssystem och skall också följa speciella tidskrav fastställda för den internationella telefonin. Mjukvara för telefontrafik måste exekvera så snabbt som möjligt. PLEX gör detmöjligt attiförvägutföra exekveringstidsestimering [7]. Till en början påverkades programstrukturen av Fortran och fick senare influenser också från Pascal och C. Därför är det relativt enkelt för ett tränat öga att känna igen sig i skriven kod. PLEX-versionen ämnad för centralprocessorn i AXE 10 kallas PLEX-C och används av Ericsson i alla deras telefonisystem. PLEX har under åren utvecklats och förenklats i olika stadier för att underlätta programmeringsarbetet. Preprocessorer som tar hand om nya beskrivande uttryck och satser i programmeringsspråk finns och används idag på Ericsson. Nämnas i sammanhanget bör HL-PLEX (High Level -PLEX) som idag förkompileras och genererar PLEX-C. Namnet hög nivå PLEX skall just symbolisera att det är etthögnivåspråk som på många sätt liknar C. Fördelen med detta är, förutom att programmeraren med koden på ett tydligare sätt kan beskriva avsikten med inmatad kod, också att dagens studenter får lära sig just detta sätt att programmera. Behovet av att förenkla kodningsproceduren är fortfarande stor och en obearbetad plan[5] som sammanställdes 1996 har fram till nu ej genomförts. Denna går utpå att införa nya satser i PLEX-C som skall köras i separata preprocessorer. Önskemål finnsatt de i ett senare skede skall infogas i PLEX-C permanent för attköras direkt i ordinarie kompilator. 2.2 Problem I PLEX-C skrivs idag av programmerarna en återstartssekvens som skall beskriva uppstarten vid ett avbrott. Denna sekvens är en viktig del i den skrivna koden som alla programmerare med ansvar för sitt eget block skall skriva.en sekvens för respektive block. Startsekvensen skall alltså ingå i alla block i PLEX-C och ser ut ungefär på samma sätt för alla block. Detta att utseendet är ungefär detsammautgör dock ett stort problem enär det i vissa fall är mycket små skillnader i koden som skall implementeras. Eftersom kod, helt enligt givna instruktioner, i väldigt stor utsträckning återanvänds (enligt klippa klistra -metoden) sparas tid och pengar. Men på grund av återstartsdirektivens små skillnader för de olika blocken och i viss mån slarv, skapar detta problem som måste minimeras. Trots att kompileringen går som den skall, fungerar det körbara programmet inte som tänkt. Därmed klarar inte den färdiga produkten att hålla sig inom ramarna för de högt uppsatta kravspecifikationer som gäller för den internationella telefonin.

5 6 2.3 Exjobbsbeskrivning Detta examensarbete har gått ut på att skapa en preprocessor, som tar hand om en nyskapad återstartssats i språket, kallad <restart statement>, och utifrån denna genererar kompilerbar funktionsduglig kod i PLEX-C. Den nya återstartssatsen är en kraftig förenkling, som på ett för programmeraren beskrivande sätt anger syftet med inmatade återstartsdirektiv. Tanken är att programmeraren istället för att använda "gammal" kod nyttjar den nyskapade satsen vid arbetet med återstartssektionen. Formuleringen av den nya satsen och användningen av preprocessorn som också upptäcker tveksamma instruktioner skall öka säkerheten och minska felprocenten. Slår detta väl ut, dvs drar programmerarna nytta av fördelarna med en preprocessor av den här typen kommer nya satser att införas framöver och utvärderas för att så småningom, om det finns tillräckligt med röster för, införas i språket PLEX-C och användas som vanlig kod. 2.4 Hjälpmedel vid problemlösning På Ericsson används verktyget ToolMaker(se vidare avsnitt 5) som är ett kompilatorgenereringsverktyg i UNIX. Verktyget används för att automatiskt generera de delar av en kompilator som läser in källkoden och analyserar dess syntax. Det fungerar ungefär på samma sätt som ett LEX- och YACC-samarbete. Till ToolMaker ger man en beskrivning på de strängar som skall accepteras, vilket görs med reguljära uttryck. För att ToolMaker skall kunna bygga upp en korrekt parser appliceras en grammatik som beskriver språkets syntax. Invävt i den grammatiken införs egna C-satser. Med hjälp av dessa byggs en logisk struktur upp som sedan används vid kodgenereringen. ToolMaker har använts vid implementeringen av preprocessorn för den nya återstartssatsen. 3 Restart statement PLEX-C är baserat på asynkron signalering mellan olika funktionsblock med övervakningsprocedurer inlagda. Vid en återstart följs en upplagd rutin(kan liknas vid en uppstart av dator) som består av ett antal olika s.k. absoluta faser. Från encentralenhet går det ut en förfrågan till aktiva funktionsblock gällande vilka återstartsfaser de vill medverka i. Funktionsblockens respektive svar lagras i den centrala enheten och därefter körs återstarten enligt fastlagd rutin. Den nya satsen kallad <restart statement> med tillhörande valmöjligheter kan nu läggas in i PLEX-C koden för att underlätta programmeringsarbetet vid kodning av återstartssekvensen för respektive funktionsblock. Satsen skall infogas i nuvarande PLEX-C för att behandlas i preprocessorn tillsammans med övrig kod. Vid inmatningar av programmeraren i <restart statement> -satsen som genererar tvetydig PLEX-C svarar preprocessorn med felmeddelanden. Detta är en kontrollfunktion som är inlagd i preprocessorn därför att preprocessorn kan godta syntaxen i inmatningen och lägga ut PLEX-C som är godkänd ur programmeringssynpunkt, men kodens betydelse kan t.ex. innebära att två olika fasalternativ skall väljas när endast ett alternativ är acceptabelt. Detta är något som programmerarna bör upptäcka av egen kraft. Dock hade Robert Lindh(handledaren på Ericsson Utvecklings AB) önskemål om extrakontroller när examensarbetet utfördes. PLEX-C kod fram till den nya satsen skall passera preprocessorn utan åtgärd och placeras ienmålfil, kallad PLEX. Då den nya satsen påträffas skall PLEX-C kod baserad på indata/inargument som tillhör den nya satsen genereras. Denna skall också placeras i målfilen PLEX. Slutresultatet blir vanlig kompilerbar PLEX-C kod. 3.1 Beskrivning av återstartskommandots olika delar (sefigur3.1påsida8) 3.1.1 <restart statement> Betraktas som fullständigt då ett textstycke som inleds med "RESTART BLOCKINFO IS" och avslutas med ";" har lokaliserats. Att det är fullständigt innebär inte automatiskt att syntaxen däremellan är korrekt. Dock fortsätter preprocessorn sitt arbete och avslutar med ett meddelande som beskriver utgången av processen. 3.1.2 <expression> Detta finns definierat i PLEX-C. Kan vara t.ex. A + B / C * D. Uttrycket <expression> behövs för att det finns restriktioner i PLEX-C vid placering av vissa uttryck i språket. Det kommer att placeras av preprocessorn på förutbestämd plats vid TBLOCKINFO = (se avsnitt 4.3 "Exempel på utseende efter körning i preprocessorn" på sida 12, rad 31).

7 8 3.1.3 <restart action> Exempel på ett "restart action kommando": AT SMALL PHASE 49 DO ABC100 Innebörden av detta beskrivs ej närmare. Lägg märke till att endast VERSALER är tillåtna. Detta för att följa gällande regler för PLEX-C. 3.1.4 <case> Anger typ av återstart. 3.1.5 <phases> En eller flera faser skall anges. Absoluta- och symboliska faser är acceptabla. 3.1.6 <absolute phase> Etttalenligtnugällande regler: 1-50, 68-74, 100-101, 127-128, 245-254 3.1.7 <symbolic phase> Ett annat sätt att uttrycka vissa absoluta faser. Symboliska faser skrivs enligt nedan: (SPH1:(1-3) - SPH6:(1-3)) SPH7:(1-12) Dessa motsvaras av absoluta faser 20-49. => Symbolisk Absolut SPH1:1 20 SPH1:2 21 SPH1:3 22 SPH2:1 23.. SPH7:12 49 3.2 Regler för implementering av nya återstartskoden Nedanstående syntaxregler för återstartskommandot <restart statement> (sefigur 3.1) är regler som måste följas för att preprocessorn skall kunna fungera. Det absolut enklaste fallet är denna inmatning $$START RESTART$$ RESTART BLOCKINFO IS <expression>; $$END RESTART$$ vilket kommer att! resultera i följande $$START RESTART$$ PLEX-C kod: RESTART BLOCKINFO IS <expression>; $$END RESTART$$! ENTER STTOR WITH CKEY; TBLOCKINFO = <expression>; SEND STTORRY WITH CKEY, TBLOCKINFO, 5, 255; EXIT; Den inmatade delen följer med in i det nya dokumentet bortkommenterad enligt PLEX- C standard (! ). Detta för attförenkla vidare förändringar som programmeraren vill göra. I de fall ändringar behövs skall de göras i den bortkommenterade delen och därefter skall preprocessorn köras igen. Den skapade koden fr.o.m. ENTER STTOR WITH t.o.m. EXIT klipps bort före ny preprocessorkörning. Detta förfarande är helt enligt önskemål frånbeställarenavpreprocessorför <restart statement> på Ericsson Utvecklings AB. <restart statement> ::= RESTART BLOCKINFO IS <expression> {<restart action>}* ; <restart action> ::= AT ((<case> <phases>) <phases> ) <action> <case> ::= SMALL LARGE RELOAD START LOCAL LARGE LOCAL START <phases> ::= PHASE <phase> PHASES <phase> {, <phase>}+ <phase> ::= <absolute phase> <symbolic phase> 3.1.8 <statement block> <label> Dessa uttryck följer gällande regler i PLEX-C. <symbolic phase> ::= (SPH1:(1-3) - SPH6:(1-3)) SPH7:(1-12) <action> :== DO <statement block> GOTO <label> Figur 3.1: Syntaxregler för återstartssatsen, modifierad ToolMakernotation.

9 10 4 Preprocessorn 4.1 Handhavande preprocessorn PLEX-C kod inklusive nya satsen sparas i en fil(benämnd infil nedan) och används som indata till preprocessorn. Fyra stycken tillfälliga (s.k. T variabler) skall deklareras i filen. T variabler TCASE TPHASE TTYPE TBLOCKINFO 4.2 Exempel på utseende före körning i preprocessorn Iexempletpå dennasidaanvänds uttrycken DO ABC10, DO ABC11 osv. i återstartssatsen. Dessa är påhittade exempel på anrop till s.k. "statement blocks" som finns definierade i PLEX-C. De fungerar på ungefär samma sätt som funktioner i C som inte returnerar någon parameter(t.ex. void func(int a)), utan bara utför vad som finns beskrivet i funktionen. Vid användning av "GOTO <label>" uttrycket i den nya satsen ser preprocessorn till att en <label> STTORRY) läggs in i koden på lämpligt ställe i återstartssekvensen. Men återhoppet till denna STTORRY) - <label> tillses av programmeraren. Sekvensen $$START RESTART$$" => "$$END RESTART$$ är den delen som preprocessorn uppfattar som den nya satsen. Den omvandlas till kompilerbar PLEX-C medan all övrig kod flyter igenom opåverkad(se avsnitt 4.3 "Exempel på utseende efter körning i preprocessorn"). En målfil skall skapas, och läggas där utdata placeras vid körning. OBS! Namnet på målfilen måste vara PLEX. INDATA BÖRJAR HÄR De två nyckelorden/strängarna "$$START RESTART$$" "$$END RESTART$$" ///////////////////////////////////////////////// <= Detta skall symbolisera PLEX-C kod PLEX-C <= som preprocessorn skall ignorera. FOLLOWED BY THE <= NEW RESTART STATEMENT <= ///////////////////////////////////////////////// <= $$START RESTART$$ placeras före respektive efter det nya komandot <restart statement> (se exempel avsnitt 4.2, rad 29-42 sid 10). RESTART BLOCKINFO IS JJ00 (-) JJ888 (*) GG99 (=) LL0 (+) OO99 <= PP10 => QQ11 AT PHASE 1 DO ABC10 AT PHASES 2,3 DO ABC11 I ett kommandofönster ges sedan kommandot pre "infil" som startar processen, varvid sedvanlig kompilerbar kod skapas. Den kompilerbara koden, tillsammans med den nya satsen bortkommenterad mha två stycken! -tecken, placeras automatiskt i måldokumentet PLEX (se exempel avsnitt 4.3, rad 21-37 sid 11). Obs! Vid användning av ett eller flera GOTO <label> -statement, skapas en STTORRY) label av preprocessorn, som placeras före SEND STTORRY delen(se exempel avsnitt 4.3, rad 29 sid 12). AT SMALL PHASES SPH1:1, SPH2:1 GOTO XYZ100 AT RELOAD PHASE 10 DO ABC50 AT LOCAL LARGE PHASE 100 DO A1000 ; $$END RESTART$$ ////////////////////////// MORE PLEX-C ////////////////////////// INDATA SLUTAR HÄR

11 12 4.3 Exempel på utseende efter körning i preprocessorn Koden som är genererad nedan är producerad mha <restart statement> (se avsnitt 4.2). Av bekvämlighetsskäl placeras den nya satsen bortkommenterad mha! tecknet förattförenkla kodningsarbetet för programmeraren vid modifieringar i koden. ///////////////////////////////////////////////// PLEX-C FOLLOWED BY THE NEW RESTART STATEMENT /////////////////////////////////////////////////! $$START RESTART$$ UTDATA BÖRJAR HÄR <= Denna del symboliserar löpande <= PLEX-C kod i ursprungsdokumentet <= som flyter igenom opåverkad. RESTART BLOCKINFO IS JJ00 (-) JJ888 (*) GG99 (=) LL0 (+) OO99 <= PP10 => QQ11 AT PHASE 1 DO ABC10 AT PHASES 2,3 DO ABC11 WHEN 20 DO WHEN 0 DO GOTO XYZ100; WHEN 23 DO WHEN 0 DO GOTO XYZ100; WHEN 10 DO WHEN 2 DO DO ABC50; ELSE WHEN 1 DO CASE TPHASE IS WHEN 100 DO DO A1000; FI; STTORRY) TBLOCKINFO = JJ00 (-) JJ888 (*) GG99 (=) LL0 (+) OO99 <= PP10 => QQ11; AT SMALL PHASES SPH1:1, SPH2:1 GOTO XYZ100 AT RELOAD PHASE 10 DO ABC50 AT LOCAL LARGE PHASE 100 DO A1000 ; $$END RESTART$$! ENTER STTOR WITH TCASE, TPHASE, TTYPE, CKEY; IF TTYPE /= 1 THEN CASE TPHASE IS WHEN 1 DO DO ABC10; WHEN 2 DO DO ABC11; WHEN 3 DO DO ABC11; SEND STTORRY WITH CKEY, TBLOCKINFO, 5, 1, 2, 3, 10, 20, 23, 100, 255; EXIT; ////////////////////////// MORE PLEX-C ////////////////////////// UTDATA SLUTAR HÄR

13 14 5ToolMaker Detta verktyg har använts vid implementeringen av preprocessorn. ToolMaker är ett kompilatorgenereringsverktyg i UNIX, som används för att automatiskt generera de delar av en kompilator som läser in källkoden och analyserar dess syntax. ToolMaker -verktyget kan liknas vid ett komplext LEX- och YACC-samarbete, med vars hjälp översättning från ett språk till ett annat är möjlig. Verktyget består av flera delar som tillsammans, med hjälp av definierade strängar, parsingteknik och C-programmering, kan skapa preprocessorer och kompilatorer av olika slag. Positionsbestämning av funna definierade tokens(ord/fraser/förutbestämd teckenföljd), deras interna koder och felmeddelanden utnyttjas gemensamt. Detta för att enkelt kunna lokalisera eventuella syntaxfel som har inmatats av programmeraren. Verktyget ToolMaker innehåller fyra beskrivningsfiler som konstruktörenavenpreprocessor har att laborera med(se avsnitt 5.1 5.4). Dessa filer genererar "vanliga".hoch.c- filer som sedan kompileras på sedvanligt sätt för att bilda en exekverbar fil så att preprocessorn kan köras. 5.1 ScannerMaker ScannerMaker skapar en scanner baserad på val av uttryck/strängar som skall kännas igen.detkanvaraenföljd av versaler utan mellanslag t.ex. BEGIN som valts till ett nyckelord. Ett uttryck som inleds med ett antal radskift, mellanslag, tabbar följt av ordet ELSE kan också om så önskas definieras som en följd som skall kännas igen. 5.2 ParserMaker ParserMaker bygger upp en parser utifrån förutbestämda regler, mönster och direktiv (bestämda av konstruktören av parsern). Efter dessa konstruktörsdirektiv växer en logisk struktur fram. Denna logiska struktur kan t.ex. se ut som trädstrukturen(se figur 5.1). Strukturen i figur 5.1 skall symbolisera ett exekveringsberoende, vilket innebär att för att TOP momentet skall exekveras krävs att alla nedanför liggande nivåer har utförts. MOMENT A exekveras då dess underliggande nivåer, moment M1-M2 är klara. MOMENT B inväntar att alla underliggande moment är utförda, följaktligen M3-M11. Moment M3-M5 påbörjar sin verksamhet först då momenten nedanför, således M6-M11 är utförda osv. De olika delmomenten betraktade var för sig behöver inte innebära mer än att ett visst mönster i den inmatade texten har upptäckts och att parsern nu skall gå vidare i en viss bestämd riktning. Det kan även innebära att en länkad lista skall skapas, etc. Vid anrop till scannern(se avsnitt 5.1) efter funna strängar erhåller parsern en sträng i taget. Denna procedur ligger invävd i trädstrukturen(se figur 5.1), allt efter konstruktörens egna önskemål. Preprocessorns beskrivningsfil (pre.pmk) som genererar parsern för återstartssatsen kan ses i bilaga 3. Vid "nyckelordsträff" lagras den funna strängen undan i väntan på att parsern(se avsnitt 5.2) aktiveras och påbörjar sina anrop efter sparade strängar. Det finns även alternativ att utföra något med den funna strängen, t.ex. att kopiera den. I princip kan vad som helst utföras inom ramen för C-kod. De lokaliserade strängarna ligger dock kvar i väntan på att parsern(se avsnitt 5.2) efterfrågar dessa. Den skapade scannern ser också till att insamlingen av "tokens" som parsern är behjälpt av påbörjas vid rätt tillfälle. MOMENT A TOP MOMENT B Preprocessorns beskrivningsfil (pre.smk) som genererar scannern för återstartssatsen kan ses i bilaga 2. M1 M2 M3 M4 M5 M6 M7 M8 M9 M10 M11 Figur 5.1: Ett exempel på beroende trädstruktur.

15 16 5.3 Övergripande beskrivningsfil för ToolMaker Denna fil kan ses som ett övergripande huvud för alla delar av ToolMaker och är ett tillval som kan göras för att få en tydligare överblick. Namnet på preprocessorn bestäms här, likaså placeras här deklarationer på strukturer och variabler som skall användas i alla delar av ToolMaker. Här deklareras t.ex. positionsbestämning av funnen token/sträng för att förenkla felhanteringen. Referenser [1] Appel Andrew W., Princeton University, with Maia Ginsburg (1998), Modern Compiler Implementation in C, Cambridge University Press, The Edinburgh Building, Cambridge CB2 2RU, United Kingdom. Preprocessorns beskrivningsfil bilaga 4. (pre.tmk) till denna del för återstartssatsen kan ses i [2] Ericsson SoftLab AB (1994), ToolMaker Reference Manual Version 2.0, Ericsson SoftLab AB, Linköping, Sweden. 5.4 Beskrivningsfil för felmeddelanden I denna fil placeras de felmeddelanden som konstruktören vill att preprocessorn skall kunna redovisa. De tilldelas en egen kod och placeras i filen prelist.c vid genereringen av preprocessorn. Preprocessorns beskrivningsfil bilaga 4. 6 Summering och slutsatser (pre.lmk) till denna del för återstartssatsen kan ses i I detta examensarbete har en preprocessor för <restart statement> -satsen skapats som tillägg till programspråket PLEX-C. Preprocessorn översätter denna sats till PLEX-C kod. Implementeringen har testats och ger i samtliga provade testfall korrekt PLEX-C kod. Den nya satsen bör såvitt det går att bedöma i nuläget inte vara något problem att införliva i programmeringsarbetet på Ericsson. Med tanke på att HL-PLEX(se avsnitt 2.1 Bakgrund sid 4), liksom <restart statement> -satsen kom till bl.a. för att det skulle vara lättare att förstå intentionen med skriven kod så kan förväntas att användningen av den nya återstartssatsen relativt enkelt går att assimilera i programmeringsprocesen. Eftersom den nya satsen ger en klar bild av syftet med skrivna rader bör användningen av satsen komma igång förhållandevis snabbt. Antalet kodrader kommer dessutom att minska, vilket gör detlätt att överblicka. Eftersom strävan med skriven plan[5]är att få ned felfrekvensen i programmeringsarbetet så är det naturligtvis värdefullt om utfallet blir det beräknade [5] med den nya satsen. Det ligger då nära till hands att andra föreslagna satser i [5] realiseras och läggs in i PLEX-C. Preprocessorer för dessa satser bör då relativt snabbt kunna tas fram mha ToolMaker som är ett kompilatorgenereringsverktyg i UNIX. Verktyget finns tillgängligt på Ericsson och användes vid framtagandet av preprocessorn för återstartssatsen i detta examensarbete. Vid arbetet med kommande satser bör samma tankebanor som utnyttjats vid detta examensarbete lätt kunna tas till vara. [3] Ericsson Telecom AB, Competence Development Services, MV/ETX/TK/XD (1996), PLEX-C1, Ericsson Telecom AB, Stockholm, Sweden. [4] Pittman Thomas, Peters James, University of Arkansas (1992), The Art of Compiler Design Theory and Practice, Prentice-Hall, inc. A Simon & Schuster Company, Englewood Cliffs, New Jersey 07632, USA. [5] Rindborg Tom (1996), Implementation Sketch UAB/B/R-96:107 Uen, Ericsson Utvecklings AB, Stockholm, Sweden. [6] Arnström Andreas, Grosz Camilla, Guillemot Andreas (1999), GRETA: a toolconcept for validation and verification of signal based systems (e.g. written in PLEX), Ericsson Utvecklings AB & Mälardalens Högskola, Sweden. [7] Axelsson Jouni, Eriksson Johan, Exekveringstidsanalys för mjukt realtidssystem(telekommunikationssystem) från grafanalys(kompilatordata) (2000), Ericsson Utvecklings AB & Mälardalens Högskola, Sweden. Bilagor Huvudprogrammet för preprocessorn (pre.c). Bilaga 1 Beskrivningsfil för ToolMaker(pre.smk), Bilaga 2 som genererar scannern. Beskrivningsfil för ToolMaker(pre.pmk), Bilaga 3 som genererar parsern. Beskrivningsfiler för ToolMaker (pre.tmk, pre.lmk). Bilaga 4