public void FactTokensRule()
{
Write("fact_tokens.txt", "male(ali,hodroj,X,'Fine not really!',[A|B]).");
StreamReader stream = new StreamReader("C:\\fact_tokens.txt");
scanner = new PrologScanner(stream);
// male
scanner.Next();
Assert.AreEqual(PrologToken.ATOM, scanner.Current.Kind);
// (
scanner.Next();
Assert.AreEqual(PrologToken.LPAREN, scanner.Current.Kind);
// ali
scanner.Next();
Assert.AreEqual(PrologToken.ATOM, scanner.Current.Kind);
// ,
scanner.Next();
Assert.AreEqual(PrologToken.COMMA, scanner.Current.Kind);
// hodroj
scanner.Next();
Assert.AreEqual(PrologToken.ATOM, scanner.Current.Kind);
// ,
scanner.Next();
Assert.AreEqual(PrologToken.COMMA, scanner.Current.Kind);
// X
scanner.Next();
Assert.AreEqual(PrologToken.VARIABLE, scanner.Current.Kind);
// ,
scanner.Next();
Assert.AreEqual(PrologToken.COMMA, scanner.Current.Kind);
// 'Fine Not Really!'
scanner.Next();
Assert.AreEqual(PrologToken.ATOM, scanner.Current.Kind);
// ,
scanner.Next();
Assert.AreEqual(PrologToken.COMMA, scanner.Current.Kind);
// [
scanner.Next();
Assert.AreEqual(PrologToken.LBRACKET, scanner.Current.Kind);
// A
scanner.Next();
Assert.AreEqual(PrologToken.VARIABLE, scanner.Current.Kind);
// |
scanner.Next();
Assert.AreEqual(PrologToken.LIST_SEP, scanner.Current.Kind);
// B
scanner.Next();
Assert.AreEqual(PrologToken.VARIABLE, scanner.Current.Kind);
// ]
scanner.Next();
Assert.AreEqual(PrologToken.RBRACKET, scanner.Current.Kind);
// )
scanner.Next();
Assert.AreEqual(PrologToken.RPAREN, scanner.Current.Kind);
// .
scanner.Next();
Assert.AreEqual(PrologToken.DOT, scanner.Current.Kind);
stream.Close();
}