Blame examples/manual/front.y

Packit f00812
/* C code supplied at the beginning of the file.  */
Packit f00812
Packit f00812
%{
Packit f00812
Packit f00812
#include <stdio.h>                          
Packit f00812
#include <string.h>
Packit f00812
Packit f00812
extern int  yylexlinenum;                   /* these are in YYlex      */
Packit f00812
extern char *yytext;                        /* current token           */
Packit f00812
Packit f00812
Packit f00812
%}
Packit f00812
Packit f00812
/* Keywords and reserved words begin here.  */
Packit f00812
Packit f00812
%union{                                     /* this is the data union  */
Packit f00812
    char   name[128];                       /* names                   */
Packit f00812
}
Packit f00812
Packit f00812
/*-------------------- the reserved words -----------------------------*/
Packit f00812
Packit f00812
%token PERIOD
Packit f00812
%token NEWLINE
Packit f00812
%token POSITIONAL
Packit f00812
Packit f00812
%token VERB
Packit f00812
%token ADVERB
Packit f00812
Packit f00812
%token PROPER_NOUN
Packit f00812
%token NOUN
Packit f00812
Packit f00812
%token DECLARATIVE
Packit f00812
%token CONDITIONAL
Packit f00812
Packit f00812
Packit f00812
%type  <name> declarative
Packit f00812
%type  <name> verb_phrase
Packit f00812
%type  <name> noun_phrase
Packit f00812
%type  <name> position_phrase
Packit f00812
%type  <name> adverb
Packit f00812
Packit f00812
%type  <name> POSITIONAL VERB ADVERB PROPER_NOUN 
Packit f00812
%type  <name> NOUN DECLARATIVE CONDITIONAL
Packit f00812
Packit f00812
%%
Packit f00812
Packit f00812
sentence_list : sentence
Packit f00812
              | sentence_list NEWLINE sentence
Packit f00812
              ;
Packit f00812
Packit f00812
Packit f00812
sentence : verb_phrase noun_phrase position_phrase adverb period 
Packit f00812
           {
Packit f00812
             printf("I understand that sentence.\n");
Packit f00812
             printf("VP = %s \n",$1);
Packit f00812
             printf("NP = %s \n",$2);
Packit f00812
             printf("PP = %s \n",$3);
Packit f00812
             printf("AD = %s \n",$4);
Packit f00812
           }
Packit f00812
         | { yyerror("That's a strange sentence !!");  }
Packit f00812
         ;
Packit f00812
Packit f00812
position_phrase : POSITIONAL  declarative PROPER_NOUN 
Packit f00812
                  {
Packit f00812
                    sprintf($$,"%s %s %s",$1,$2,$3);
Packit f00812
                  }   
Packit f00812
                | /* empty */ { strcpy($$,""); }
Packit f00812
                ;
Packit f00812
               
Packit f00812
Packit f00812
verb_phrase : VERB { strcpy($$,$1); strcat($$," "); }
Packit f00812
            | adverb VERB  
Packit f00812
              {
Packit f00812
                sprintf($$,"%s %s",$1,$2);
Packit f00812
              }
Packit f00812
            ;
Packit f00812
Packit f00812
adverb : ADVERB      { strcpy($$,$1); }
Packit f00812
       | /* empty */ { strcpy($$,""); }
Packit f00812
       ;
Packit f00812
Packit f00812
noun_phrase : DECLARATIVE NOUN 
Packit f00812
              {
Packit f00812
                sprintf($$,"%s %s",$1,$2);
Packit f00812
              }
Packit f00812
            | CONDITIONAL declarative NOUN 
Packit f00812
                  {
Packit f00812
                    sprintf($$,"%s %s %s",$1,$2,$3);
Packit f00812
                  }   
Packit f00812
            | NOUN { strcpy($$,$1); strcat($$," "); }
Packit f00812
            ;
Packit f00812
Packit f00812
declarative : DECLARATIVE { strcpy($$,$1); }
Packit f00812
            | /* empty */ { strcpy($$,""); }
Packit f00812
            ;
Packit f00812
Packit f00812
period : /* empty */
Packit f00812
       | PERIOD
Packit f00812
       ;
Packit f00812
Packit f00812
Packit f00812
%%
Packit f00812
Packit f00812
/* Supplied main() and yyerror() functions.  */
Packit f00812
Packit f00812
int main(int argc, char *argv[])
Packit f00812
{
Packit f00812
  yyparse();   /* parse the file          */
Packit f00812
  return(0);
Packit f00812
}
Packit f00812
Packit f00812
int yyerror(char *message)
Packit f00812
{
Packit f00812
  extern FILE *yyout;
Packit f00812
Packit f00812
  fprintf(yyout,"\nError at line %5d. (%s) \n",
Packit f00812
                     yylexlinenum,message);
Packit f00812
}