B.1 Lexikalische Definition



next up previous contents
Next: B.2 Syntaktische Definition Up: Dissertation Johannes Demel Previous: B Formale Definition der

B.1 Lexikalische Definition

 

In diesem Abschnitt ist die Eingabe für den Scanner-Generator SCANGEN [76] gelistet.

Die Eingabe geht davon aus, daß der ASCII-Characterset verwendet wird, wobei das höchste Bit (Paritätsbit) nicht signifikant ist.

Die in der Eingabe des Scanner-Generators definierten Terminal-Symbole (``Token'') werden vom Scanner bei der Analyse der JANAP-Eingabe an den Parser weitergegeben. Die Definition der Terminal-Symbole für den Scanner-Generator erfolgt durch sogenannte Regular Expressions. Jedem Terminal-Symbol werden vom Scanner zwei Zahlen (Major und Minor) zugeordnet. Dadurch werden die Terminal-Symbole eindeutig identifiziert. Für JANAP wurde die erste Zahl (Major) wie folgt gewählt:

0
Kommentar oder Leerzeichen
1
Anweisungsschlüsselworte
2
Schlüsselworte innerhalb einer Anweisung (Parameter)
3
Text-Konstante
4
Zahlen
5
Bauelementanweisungen
6
Sonderzeichen
7
Spezialzeichen, die vom Parser in Abhängigkeit des Kontext eingefügt werden.

OPTIONS
  list, report,  tables, dfa, unreachable, optimize

CLASS

C = 'C','c';
E = 'E','e';
G = 'G','g';
I = 'I','i';
L = 'L','l';
M = 'M','m';
R = 'R','r';
S = 'S','s';
U = 'U','u';
V = 'V','v';
X = 'X','x';
SmallLetter =   'b', 'd', 'f', 'h', 'j', 'o','q', 'w', 'y', 'z'
                'a', 'k', 'n', 'p', 't';
BigLetter =     'B', 'D', 'F', 'H', 'J', 'O','Q', 'W', 'Y', 'Z'
                'A', 'K', 'N', 'P', 'T';
Digit =         '0'..'9';
EndLineChar =   13;
LineFeed =      10;
Blank =         ' ',9,12;
Commachar =     ',';
dotchar =       '.';
minuschar =     '-';
pluschar  =     '+';
lparenchar=     '(';
rparenchar=     ')';
starchar  =     '*';
slashchar =     '/';
equalchar =     '=';
underlinechar = '_';
apochar   =     '''',96;
dollar =        '$';

Illegal   = '!', '#', '%', '&', ':', ';', '?', '@', '[', ']','<','>',
                1..8,11,14..31,123..127,'\', '^', '"';

DEFINITION

letter = C, E, G, I, L, M,  R, S, U, V, X, SmallLetter, BigLetter;
restname =      (letter, digit) *;

TOKEN commentline{0} = EndLineChar{TOSS}.LineFeed{TOSS}*.
                     starchar{TOSS}.(not EndLineChar{TOSS})*;
TOKEN blankspace{0}= blank{TOSS}+;
TOKEN newline{0} = EndLineChar{TOSS}.LineFeed{TOSS}*;

TOKEN Cname {5,1} = C.restname  EXCEPT 'CASES' {2,1},
                                       'COMMON' {2,2} ;
TOKEN Gname {5,2} = G.restname ;
TOKEN Iname {5,3} = I.restname  EXCEPT 'INITIAL' {1,9} ,
                                       'INTERVAL' {2,5} ;
TOKEN Lname {5,4} = L.restname  EXCEPT 'LIBRARY' {1,10} ;
TOKEN Mname {5,5} = M.restname  EXCEPT 'MAGPH' {2,6} ;
TOKEN Rname {5,6} = R.restname;
TOKEN Sname {5,7} = S.restname  EXCEPT 'SCATTER' {2,10},
                                       'SCALE'   {2, 9},
                                       'STEADY'  {1,15},
                                       'SUBCKT'  {1,16};
TOKEN Uname {5,8} = U.restname ;
TOKEN Vname {5,9} = V.restname  EXCEPT 'VARYING' {1,21};
TOKEN Xname {5,10} = X.restname ;
TOKEN oname {5,11} = (BigLetter,SmallLetter,E).restname
                                EXCEPT 'DC'     {1,1},
                                       'DEBUG'  {1,2},
                                       'END'    {1,3},
                                       'ENDS'   {1,4},
                                       'EXTERN' {1,5},
                                       'FUNCTION' {1,7},
                                       'HISTO'  {1,8},
                                       'OPTION' {1,11},
                                       'PARAM'  {1,12},
                                       'PLOT'   {1,13},
                                       'PRINT'  {1,14},
                                       'TABLE'  {1,17},
                                       'TITLE'  {1,18},
                                       'TOPOLOGY' {1,19},
                                       'TRAN'   {1,20},
                                       'DECADE' {2,3},
                                       'ENVELOPE' {2,4},
                                       'POINTS' {2,7},
                                       'PSTEP'  {2,8},
                                       'TC1'    {2,12},
                                       'TC2'    {2,13};

TOKEN integer {4,1} = digit + ;
TOKEN signinteger {4,5} = minuschar.integer;
TOKEN digitname {5,12} = digit+.letter.(letter,digit)*;
TOKEN signdigitname {4,4} = minuschar.digitname;
TOKEN unreal {4,2} =
             (integer.(epsilon,dotchar.(epsilon,integer)),
              dotchar.integer).
             (epsilon,(E.(epsilon,pluschar{TOSS},minuschar).integer)).
             letter * ;
TOKEN signreal {4,3} = (pluschar{TOSS},minuschar).unreal;

TOKEN text {3,0} = apochar{TOSS}.
             (not (apochar,EndLineChar), apochar{TOSS}.apochar)* .
             apochar{TOSS};

TOKEN comma {6,1} = commachar{TOSS};
TOKEN plus {6,2} = pluschar{TOSS};
TOKEN minus {6,3} = minuschar;
TOKEN mult {6,4} = starchar{TOSS};
TOKEN slash {6,5} = slashchar{TOSS};
TOKEN power {6,6} = starchar{TOSS}.starchar{TOSS};
TOKEN equal {6,7} = equalchar{TOSS};
TOKEN leftparen {6,8} = lparenchar{TOSS};
TOKEN rightparen {6,9} = rparenchar{TOSS};
TOKEN underline {6,10} = underlinechar{TOSS};
TOKEN spclE{7,1} = dollar{TOSS}.E;
TOKEN spclR{7,2} = dollar{TOSS}.R;
TOKEN spclV{7,3} = dollar{TOSS}.V;
TOKEN spclS{7,4} = dollar{TOSS}.S;


Martin Stiftinger
Fri Jun 9 19:49:39 MET DST 1995