public void Parse(string file_path) { Source source = new Source(file_path); var scanner = new PascalScanner(source); var parser = new PascalParser(scanner); parser.Parse(); }
public void NextChar_ShouldReturnNextChar() { const char expectedNextChar = 'a'; var scanner = new PascalScanner(Mock.Of <ISource>(source => source.NextChar() == expectedNextChar)); scanner.NextChar().Should().Be(expectedNextChar); }
public static Parser createParser(string language, string type, Source source) { if (StringComparer.CurrentCultureIgnoreCase.Equals(language, "Pascal") && StringComparer.CurrentCultureIgnoreCase.Equals(type, "top-down")) { Scanner scanner = new PascalScanner(source); return(new PascalParserTD(scanner)); } else if (!StringComparer.CurrentCultureIgnoreCase.Equals(language, "Pascal")) { throw new Exception("Parser factory: Invalid language '" + language + "'"); } else { throw new Exception("Parser factory: Invalid type '" + type + "'"); } }
public static Parser CreateParser(string language, string type, Source source) { var lang = language.ToLower(); var t = type.ToLower(); if (lang == "pascal" && t == "top-down") { var scanner = new PascalScanner(source); return(new PascalParserTD(scanner)); } else if (lang != "pascal") { throw new Exception($"Parser factory: invalid language '{language}'"); } else { throw new Exception($"Parser factory: invalid type '{type}'"); } }
public void NextToken_ShouldReturnCharTokenIfCurrentCharIsNotEndOfFile() { var scanner = new PascalScanner(Mock.Of <ISource>(source => source.CurrentChar() == 'a')); scanner.NextToken().Should().BeOfType(typeof(CharToken)); }
public void NextToken_ShouldReturnEndOfFileTokenIfCurrentCharIsEndOfFile() { var scanner = new PascalScanner(Mock.Of <ISource>(source => source.CurrentChar() == Constants.EOF)); scanner.NextToken().Should().BeOfType(typeof(EofToken)); }