rewrite.g
上传用户:afrynkmhm
上传日期:2007-01-06
资源大小:1262k
文件大小:1k
源码类别:

编译器/解释器

开发平台:

Others

  1. class Rewrite extends Lexer;
  2. protected
  3. START
  4. options {
  5. ignore=WS;
  6. }
  7. : id:ID ":="! '('! expr:EXPR ')'!
  8. {
  9. // can access text matched for any rule
  10. System.out.println("found "+id.getText()+","+expr.getText());
  11. // text will be ID+EXPR minus whitespace
  12. }
  13. ;
  14. protected
  15. ID : ( let:LETTER {System.out.println("letter "+let.getText());} )+
  16. ;
  17. protected
  18. LETTER
  19. : 'a'..'z'
  20. {
  21. String s = $getText; // get access text of this rule
  22. $setText(s.toUpperCase()); // can reset it too
  23. }
  24. ;
  25. protected
  26. EXPR: i:INT! // don't include, but i.getText() has access
  27. {$setText(i.getText());} // effect is if no "!" and no "i:"
  28. | ID
  29. ;
  30. protected
  31. INT : ('0'..'9')+
  32. ;
  33. // what if ! on rule itself and invoker had !...should
  34. // rule return anything in the token to the invoker?  NO!
  35. // make sure 'if' is in the right spot
  36. // What about no ! on caller but ! on called rule?
  37. protected
  38. WS! : ( ' ' // whitespace not saved
  39. | 't'
  40. | 'n' {newline();}
  41. )+
  42. {$setType(Token.SKIP);} // way to set token type
  43. ;