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

编译器/解释器

开发平台:

Others

  1. (* 
  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/lib/sather/Antlr/input_buffer.sa#1 $
  7. *)
  8. partial class ANTLR_INPUT_BUFFER is
  9.    -- clones both antlr.ByteBuffer and antlr.InputBuffer
  10.    private attr input : $ISTREAM;
  11.    private attr num_to_consume : INT;
  12.    private attr n_markers : INT;
  13.    private attr marker_offset : INT;
  14.    private attr queue : CIRCULAR_QUEUE{CHAR};
  15.    init is
  16.       num_to_consume := 0;
  17.       n_markers := 0;
  18.       marker_offset := 0;
  19.       queue := #CIRCULAR_QUEUE{CHAR}(1);
  20.    end;
  21.    consume is
  22.       num_to_consume := num_to_consume + 1;
  23.    end;
  24.    commit is 
  25.       n_markers := n_markers - 1;
  26.    end;
  27.    is_marked : BOOL is
  28.       return ( n_markers /= 0 );
  29.    end;
  30.    LA ( i : INT ) : CHAR is
  31.       fill(i);
  32.       return queue[ marker_offset + i - 1 ];
  33.    end;
  34.    mark : INT is 
  35.       sync_consume;
  36.       n_markers := n_markers + 1;
  37.       return marker_offset;
  38.    end;
  39.    rewind ( mrk : INT ) is
  40.       sync_consume;
  41.       marker_offset := mrk;
  42.       n_markers := n_markers - 1;
  43.    end;
  44.    private sync_consume is
  45.       loop while!( num_to_consume > 0 );
  46.  if n_markers > 0 then
  47.     marker_offset := marker_offset + 1;
  48.  else
  49.     queue.remove_first;
  50.  end;
  51.  num_to_consume := num_to_consume - 1;
  52.       end;
  53.    end;
  54.    stub fill ( amount : INT );
  55. --   fill ( amount : INT ) is
  56. --      sync_consume;
  57. --
  58. --      loop while!( queue.num_entries < amount + marker_offset );
  59. --  queue.append( input.get );
  60. --      end;      
  61. --   end;
  62. end;