home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / languages / elisp / modes / math / notebook.l < prev    next >
Encoding:
Lex Description  |  1989-01-17  |  1.5 KB  |  98 lines

  1.  
  2. %{
  3. #include "notebook.h"
  4. char * nbval = "";
  5. char * nboldval = "";
  6.  
  7. char tokbuf[512];
  8. char tokoldbuf[512];
  9.  
  10. #ifdef LEXER
  11. #define result(tok) {\
  12. printf("%s ", "tok");\
  13.  return(tok); }
  14. #else
  15. #define result(tok) {\
  16.  return(tok); }
  17. #endif
  18. %}
  19.  
  20. whitespace    [ \t\n\r]*
  21. token        ([a-zA-Z0-9]+|\"[^"\n]+\")
  22.  
  23. %Start    Head Body
  24.  
  25. %%
  26. ^"(*^"{whitespace}    { BEGIN Body; result (OPENNOTEBOOK) ; }
  27.  
  28. ^"^*)"{whitespace}    result (CLOSENOTEBOOK) ;
  29.  
  30. ^"(*"{whitespace}    result (OPENCOMMENT) ;
  31. ^"*)"{whitespace}    result (CLOSECOMMENT) ;
  32.  
  33. <Body>^"::["        { BEGIN Head;
  34.               result (NBOPENHEAD) ; }
  35.  
  36. <Body>^":["        { BEGIN Head;
  37.               result (OPENHEAD) ; }
  38.  
  39. <Head>"]"{whitespace}\n        { BEGIN Body;
  40.               result (CLOSEHEAD) ; }
  41.  
  42. <Body>^";[o]"        result (OUTPUTSUBHEAD) ;
  43. <Body>^";[s]"        result (SETTINGSSUBHEAD) ;
  44.  
  45. <Head>";"        result (SEMI) ;
  46. <Head>"="        result (EQUAL) ;
  47. <Head>","        result (COMMA) ;
  48.  
  49. <Head>{whitespace}    ;
  50.  
  51.  
  52. <Body>^([^:;\n].*)|\n    {
  53.               strcpy(tokoldbuf, tokbuf);
  54.               nboldval = tokoldbuf;
  55.               strcpy(tokbuf, yytext);
  56.              nbval = tokbuf;
  57. #ifdef LEXER
  58. printf("\"%s\" ", nbval);
  59. #endif
  60.             result (CONTENTS) ;}
  61.  
  62. <Head>{token}(" "{token})*    { 
  63.               strcpy(tokoldbuf, tokbuf);
  64.               nboldval = tokoldbuf;
  65.               strcpy(tokbuf, yytext);
  66.               nbval = tokbuf;
  67. #ifdef LEXER
  68. printf("\"%s\" ", nbval);
  69. #endif
  70.              result (TOKEN) ; }
  71.  
  72. <Body>.        { printf("\\%3o", yytchar);  /* last char read */
  73.           result (CONTENTS); }
  74.  
  75. <Head>.        { printf(" Illegal Character: \\%3o\n", yytchar);
  76.           result (-1); }
  77.  
  78. %% 
  79.  
  80. #ifdef LEXER
  81. main ()
  82. {
  83.     int t;
  84.     
  85.     t = yylex();
  86.     while (t)
  87.      {
  88.         t = yylex();
  89.     }
  90. }
  91.  
  92. int yywrap ()
  93. {
  94.   return (1);
  95. }
  96.  
  97. #endif
  98.