On 02/02/2011 05:49 PM, Andrej Mitrovic wrote:
What is Ordinal defined as? If it's a uint, I get the expected results:
alias uint Ordinal;
struct Lexeme {
string tag;
string slice;
Ordinal index;
}
void main()
{
auto lex1 = Lexeme("a","b",1);
auto lex2 = Lexeme("a","b",1);
assert(lex1 == lex2);
assert(lex1 == Lexeme("a","b",1));
}
Can't say much more without knowing what your app does though.
Actually, its size_t. But I also have everything working fine in a test case
exactly similar to yours (see other post). Dunno yet why I need to add an
opEquals just comparing members individually for my unittests to pass.
I take the opportunity to say a few words about the module; case (1) it helps
debugging (2) some people are interested in it.
The module is a lexing toolkit. It allows creating a lexer from a language's
"morphology", then use it to scan source. Example for simple arithmetics:
Morphology morphology = [
[ "SPACING" , `[\ \t]*` ],
[ "OPEN_GROUP" , `(` ],
[ "CLOSE_GROUP" , `)` ],
[ "operator" , `[+*-/]` ],
[ "symbol" , `[a-zA-A][a-zA-A0-9]*` ],
[ "number" , `[+-]?[0-9]+(\.[0-9]+)?` ],
];
auto lexer = new Lexer(morphology);
auto lexemes = lexer.lexemes(source);
As you see, each lexeme kind is defined by a string tag and a regex format.
The output is an array of lexemes holding the matched slice, wrapped in a class
LexemeStream. This class mainly provides a match method:
Lexeme* match (tag)
Match returns a pointer to the current lexeme if it is of the right kind, else
null (same principle as D's builtin 'in' operator). So, one can either ignore
the lexeme if all what is needed is testing the match (case of punctuation), or
use the lexeme's slice (case of values).
The issue I get happens when checking that a result stream of lexemes is as
expected: '==' failed. I then checked its first/last lexemes only: ditto. Thus,
I started to wonder about the default semantics of '==' for structs, so that I
wrote my own opEquals ==> pass for individual lexemes, pass for whole lexeme
streams. Why? dunno.
Denis
--
_________________
vita es estrany
spir.wikidot.com