String literal recognition problem

Posted by helicera on Stack Overflow See other posts from Stack Overflow or by helicera
Published on 2011-01-12T21:04:48Z Indexed on 2011/01/12 21:54 UTC
Read the original article Hit count: 220

Filed under:
|
|

Hello! I'm trying to recognize string literal by reading string per symbol. Here is a sample code:

#region [String Literal (")]
case '"': // {string literal ""}
{
    // skipping '"'
    ChCurrent = Line.ElementAtOrDefault<Char>(++ChPosition);
    while(ChCurrent != '"')
    {
        Value.Append(ChCurrent);
        ChCurrent = Line.ElementAtOrDefault<Char>(++ChPosition);

        if(ChCurrent == '"')
        {
            // "" sequence only acceptable
            if(Line.ElementAtOrDefault<Char>(ChPosition + 1) == '"')
            {
                Value.Append(ChCurrent);
                // skip 2nd double quote
                ChPosition++;
                // move position next
                ChCurrent = Line.ElementAtOrDefault<Char>(++ChPosition);
            }
        }
        else if(default(Char) == ChCurrent)
        {
            // message: unterminated string
            throw new ScanningException();
        }                                
    }        
    ChPosition++;
    break;
}
#endregion

When I run test:

[Test]
[ExpectedException(typeof(ScanningException))]
public void ScanDoubleQuotedStrings()
{
    this.Scanner.Run(@"""Hello Language Design""", default(System.Int32));
    this.Scanner.Run(@"""Is there any problems with the """"strings""""?""", default(System.Int32));
    this.Scanner.Run(@"""v#:';?325;.<>,|+_)""(*&^%$#@![]{}\|-_=""", default(System.Int32));
    while(0 != this.Scanner.TokensCount - 1)
    {
        Assert.AreEqual(Token.TokenClass.StringLiteral, this.Scanner.NextToken.Class);
    }
}

It passes with success.. while I'm expecting to have an exception according to unmatched " mark in

this.Scanner.Run(@"""v#:';?325;.<>,|+_)""(*&^%$#@![]{}\|-_=""", default(System.Int32));

Can anyone explain where is my mistake or give an advice on algorithm.

© Stack Overflow or respective owner

Related posts about c#

Related posts about pascal