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

编译器/解释器

开发平台:

Others

  1. package antlr;
  2. /* ANTLR Translator Generator
  3.  * Project led by Terence Parr at http://www.jGuru.com
  4.  * Software rights: http://www.antlr.org/RIGHTS.html
  5.  *
  6.  * $Id: //depot/code/org.antlr/release/antlr-2.7.0/antlr/Alternative.java#1 $
  7.  */
  8. import java.util.Hashtable;
  9. /** Intermediate data class holds information about an alternative */
  10. class Alternative {
  11. // Tracking alternative linked list
  12. AlternativeElement head;   // head of alt element list
  13. AlternativeElement tail;  // last element added
  14. // Syntactic predicate block if non-null
  15. protected SynPredBlock synPred;
  16. // Semantic predicate action if non-null
  17. protected String semPred;
  18. // Exception specification if non-null
  19. protected ExceptionSpec exceptionSpec;
  20. // Init action if non-null;
  21. protected Lookahead[] cache; // lookahead for alt.  Filled in by
  22. // deterministic() only!!!!!!!  Used for
  23. // code gen after calls to deterministic()
  24. // and used by deterministic for (...)*, (..)+,
  25. // and (..)? blocks.  1..k
  26. protected int lookaheadDepth; // each alt has different look depth possibly.
  27. // depth can be NONDETERMINISTIC too.
  28. // 0..n-1
  29. // If non-null, Tree specification ala -> A B C (not implemented)
  30. protected Token treeSpecifier = null;
  31. // True of AST generation is on for this alt
  32. private boolean doAutoGen;
  33. public Alternative() {
  34. }
  35. public Alternative(AlternativeElement firstElement) {
  36. addElement(firstElement);
  37. }
  38. public void addElement(AlternativeElement e)
  39. {
  40. // Link the element into the list
  41. if ( head == null ) {
  42. head = tail = e;
  43. }
  44. else {
  45. tail.next = e;
  46. tail = e;
  47. }
  48. }
  49. public boolean atStart() { return head == null; }
  50. public boolean getAutoGen() { 
  51. // Don't build an AST if there is a tree-rewrite-specifier
  52. return doAutoGen && treeSpecifier == null; 
  53. }
  54. public Token getTreeSpecifier() {
  55. return treeSpecifier;
  56. }
  57. public void setAutoGen(boolean doAutoGen_) {
  58. doAutoGen = doAutoGen_;
  59. }
  60. }