fork download
  1. %{
  2. /*
  3.  * We now build a lexical analyzer to be used by a higher-level parser.
  4.  */
  5.  
  6. #include "y.tab.h" /* token codes from the parser */
  7.  
  8. #define LOOKUP 0 /* default - not a defined word type. */
  9.  
  10. int state;
  11.  
  12. %}
  13.  
  14. %%
  15.  
  16. \n { state = LOOKUP; }
  17.  
  18. \.\n { state = LOOKUP;
  19. return 0; /* end of sentence */
  20. }
  21.  
  22. ^verb { state = VERB; }
  23. ^adj { state = ADJECTIVE; }
  24. ^adv { state = ADVERB; }
  25. ^noun { state = NOUN; }
  26. ^prep { state = PREPOSITION; }
  27. ^pron { state = PRONOUN; }
  28. ^conj { state = CONJUNCTION; }
  29.  
  30. [a-zA-Z]+ {
  31. if(state != LOOKUP) {
  32. add_word(state, yytext);
  33. } else {
  34. switch(lookup_word(yytext)) {
  35. case VERB:
  36. return(VERB);
  37. case ADJECTIVE:
  38. return(ADJECTIVE);
  39. case ADVERB:
  40. return(ADVERB);
  41. case NOUN:
  42. return(NOUN);
  43. case PREPOSITION:
  44. return(PREPOSITION);
  45. case PRONOUN:
  46. return(PRONOUN);
  47. case CONJUNCTION:
  48. return(CONJUNCTION);
  49. default:
  50. printf("%s: don't recognize\n", yytext);
  51. /* don't return, just ignore it */
  52. }
  53. }
  54. }
  55. . ;
  56.  
  57. %%
Success #stdin #stdout #stderr 0.02s 6320KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
ERROR: /home/9r2aTn/prog:6:1: Syntax error: Operator expected
ERROR: /home/9r2aTn/prog:57:1: Syntax error: Unexpected end of file
ERROR: '$runtoplevel'/0: Undefined procedure: program/0
   Exception: (3) program ? EOF: exit