Специальная математика. Соловьев А.Е. - 90 стр.

UptoLike

Составители: 

Рубрика: 

S
T * T
T + T T - T
Пример наследуемых атрибутов приведен на следующем рисунке:
x:= if A then b else C
:=
i
x if i ri
A B C
b r i
7.18. YACC
yacc - программа синтаксического анализа (yet another compile of compiles).
Также как и lex – ‘она начально была написана, как команда для ОС UNIX.
Часто эти команды используются совместно.
Пример.
% token CONST VAR ZN EQ
%%
pr: VAR EQ vyr ((выражение)) {printf(“prog\n”);}
vyr : CONST ZN vyr {printf(“CONST ZN vyr\n”);}
VAR ZN vyr {printf(“VAR ZN vyr\n”);}
CONST {printf(“CONST\n”);}
VAR {printf(“VAR\n”);}
Работа над примером : а1 = а1 + с3 - 13
выдала :
CONST
VAR ZN vyr
VAR ZN vyr
prog
Для обработки ошибок есть стандартная функция ERROR.
flex - fast lexical analyzer generator
раздел деклараций
%%
раздел правил
%%
пользовательский код
Раздел деклараций :
имя значение
Раздел правил :
— 90 —
r
* i r
+ -
a b c d
r r i i
i - integer
r - real
                S                                    r
                                                     *             ir
      T         *           T
                                               +           -

T     +    T        T       -   T
                                              a      b c       d
                                              r      r i       i
                                         i - integer
                                         r - real

Пример наследуемых атрибутов приведен на следующем рисунке:

    x:= if A then b else C
             :=
      i
        x        if i      ri

            A       B   C
            b       r   i

                                          7.18. YACC

yacc - программа синтаксического анализа (yet another compile of compiles).
Также как и lex – ‘она начально была написана, как команда для ОС UNIX.
Часто эти команды используются совместно.
Пример.
% token CONST VAR ZN EQ
%%
pr: VAR EQ vyr ((выражение)) {printf(“prog\n”);}
vyr : CONST ZN vyr {printf(“CONST ZN vyr\n”);}
      VAR ZN vyr {printf(“VAR ZN vyr\n”);}
      CONST {printf(“CONST\n”);}
      VAR {printf(“VAR\n”);}
Работа над примером : а1 = а1 + с3 - 13
выдала :
CONST
VAR ZN vyr
VAR ZN vyr
prog
  Для обработки ошибок есть стандартная функция ERROR.

flex - fast lexical analyzer generator
раздел деклараций
%%
раздел правил
%%
пользовательский код

Раздел деклараций :
 имя значение
Раздел правил :

                                             — 90 —