Note that there are some explanatory texts on larger screens.

plurals
  1. POString literal recognition problem
    text
    copied!<p>I'm trying to recognize <strong>string literal</strong> by reading string <strong>per symbol</strong>. Example of my <strong>scanner skeleton</strong>: </p> <pre><code>public sealed class Scanner { // some class inner implementations /// &lt;summary&gt; /// /// &lt;/summary&gt; /// &lt;param name="Line"&gt;&lt;/param&gt; /// &lt;param name="LineNumber"&gt;&lt;/param&gt; public void Run(String Line, Int32 LineNumber) { var ChPosition = default(Int32); var ChCurrent = default(Char); var Value = new StringBuilder(); while (default(Char) != Line.ElementAtOrDefault&lt;Char&gt;(ChPosition)) { ChCurrent = Line.ElementAtOrDefault&lt;Char&gt;(ChPosition); #region [Whitespace] if (Char.IsWhiteSpace(ChCurrent)) { ChPosition++; } #endregion else { switch (ChCurrent) { #region [String Literal (")] case '"': { // skipping " sign, include only string inner value ChCurrent = Line.ElementAtOrDefault&lt;Char&gt;(++ChPosition); // ...? Problematic place!!! this.Tokens.Enqueue(new SharedEntities.Token { Class = SharedEntities.Token.TokenClass.StringLiteral, Value = Value.ToString() } ); Value.Clear(); ChPosition++; break; } #endregion { throw new ScanningException( "&lt;syntax_error#" + ChCurrent.ToString() + "&gt;\n" + "Unsupported character appeared at: {ln: " + LineNumber.ToString() + "; pos: " + (ChPosition + 1).ToString() + "}" ); } } // [switch(ChCurrent)] } // [if(Char.IsWhiteSpace(ChCurrent))...else] } // [while(default(Char) != Line.ElementAtOrDefault&lt;Char&gt;(ChPosition))] } // [public void Run(String Line, Int32 LineNumber)] } // [public sealed class Scanner] </code></pre> <p>My target is to parse pascal-like string: "{<em>everything enclosed</em>, <em>but</em> ", <em>only</em> "" <em>pair is allowed</em>}".</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload