Mercurial > pub > ImplabNet
comparison Implab/Formats/TextScanner.cs @ 182:76e8f2ba12b8 ref20160224
pretty print DFA, the minimization is still buggy
| author | cin |
|---|---|
| date | Thu, 24 Mar 2016 18:52:10 +0300 |
| parents | b2b6a6640aa3 |
| children |
comparison
equal
deleted
inserted
replaced
| 181:b2b6a6640aa3 | 182:76e8f2ba12b8 |
|---|---|
| 51 internal bool ReadToken<TTag>(int[,] dfa, bool[] final, TTag[][] tags, int state, int[] alphabet, out TTag[] tag) { | 51 internal bool ReadToken<TTag>(int[,] dfa, bool[] final, TTag[][] tags, int state, int[] alphabet, out TTag[] tag) { |
| 52 m_tokenLength = 0; | 52 m_tokenLength = 0; |
| 53 tag = null; | 53 tag = null; |
| 54 | 54 |
| 55 var maxSymbol = alphabet.Length - 1; | 55 var maxSymbol = alphabet.Length - 1; |
| 56 | 56 int next; |
| 57 do { | 57 do { |
| 58 // after the next chunk is read the offset in the buffer may change | 58 // after the next chunk is read the offset in the buffer may change |
| 59 int pos = m_bufferOffset + m_tokenLength; | 59 int pos = m_bufferOffset + m_tokenLength; |
| 60 | 60 next = state; |
| 61 while (pos < m_bufferSize) { | 61 while (pos < m_bufferSize) { |
| 62 var ch = m_buffer[pos]; | 62 var ch = m_buffer[pos]; |
| 63 | 63 |
| 64 try { | 64 next = dfa[next, ch > maxSymbol ? AutomatonConst.UNCLASSIFIED_INPUT : alphabet[ch]]; |
| 65 var next = dfa[state, ch > maxSymbol ? AutomatonConst.UNCLASSIFIED_INPUT : alphabet[ch]]; | |
| 66 | 65 |
| 67 if (next == AutomatonConst.UNREACHABLE_STATE) | 66 if (next == AutomatonConst.UNREACHABLE_STATE) |
| 68 break; | 67 break; |
| 69 | 68 |
| 70 state = next; | 69 state = next; |
| 71 }catch { | |
| 72 throw; | |
| 73 } | |
| 74 pos++; | 70 pos++; |
| 75 } | 71 } |
| 76 | |
| 77 m_tokenLength = pos - m_bufferOffset; | 72 m_tokenLength = pos - m_bufferOffset; |
| 78 } while (state != AutomatonConst.UNREACHABLE_STATE && Feed()); | 73 } while (next != AutomatonConst.UNREACHABLE_STATE && Feed()); |
| 79 | 74 |
| 80 m_tokenOffset = m_bufferOffset; | 75 m_tokenOffset = m_bufferOffset; |
| 81 m_bufferOffset += m_tokenLength; | 76 m_bufferOffset += m_tokenLength; |
| 82 | 77 |
| 83 if (final[state]) { | 78 if (final[state]) { |
| 148 public string GetTokenValue() { | 143 public string GetTokenValue() { |
| 149 return new String(m_buffer, m_tokenOffset, m_tokenLength); | 144 return new String(m_buffer, m_tokenOffset, m_tokenLength); |
| 150 } | 145 } |
| 151 | 146 |
| 152 public void CopyTokenTo(char[] buffer, int offset) { | 147 public void CopyTokenTo(char[] buffer, int offset) { |
| 153 m_buffer.CopyTo(buffer, offset); | 148 Array.Copy(m_buffer, m_tokenOffset,buffer, offset, m_tokenLength); |
| 154 } | 149 } |
| 155 | 150 |
| 156 public void CopyTokenTo(StringBuilder sb) { | 151 public void CopyTokenTo(StringBuilder sb) { |
| 157 sb.Append(m_buffer, m_tokenOffset, m_tokenLength); | 152 sb.Append(m_buffer, m_tokenOffset, m_tokenLength); |
| 158 } | 153 } |
