MBOX-Line: From ayluen at i-freelancer.net  Sun May  5 20:52:55 2013
To: imap-protocol@u.washington.edu
From: =?big5?B?p/Wm463b?= <ayluen@i-freelancer.net>
Date: Fri Jun  8 12:34:51 2018
Subject: [Imap-protocol] Imap Search Command Parse Logic
In-Reply-To: <5EC8241E-F964-43EE-85EA-0DCD76E021A4@iki.fi>
References: <000001ce47e7$4c7bead0$e573c070$@i-freelancer.net>
	<5EC8241E-F964-43EE-85EA-0DCD76E021A4@iki.fi>
Message-ID: <001901ce4a0d$3101b9b0$93052d10$@i-freelancer.net>

Yes, I've been testing my logic with different kinds of scenarios with/out
parenthesis and got stuck when there are many levels of sublists.  I have to
admit my background on data structure is not very solid.
That's why I was hoping to get some tips from the experts here. I will
proceed with your suggestion using the tree structure. Thank you for helping
me out~~

Regards,

Helen

-----Original Message-----
From: Timo Sirainen [mailto:tss@iki.fi] 
Sent: Friday, May 03, 2013 6:56 PM
To: ???
Cc: imap-protocol@u.washington.edu
Subject: Re: [Imap-protocol] Imap Search Command Parse Logic

On 3.5.2013, at 13.16, ??? <ayluen@i-freelancer.net> wrote:

> I'm currently working on implementing IMAP protocol on our mail server.
This is my first time implementing such a big project and I've so far coded
a majority of IMAP commands in the RFC, except the Search command.
> I've been searching on the internet and studied postfix(RPN) algorithm for
weeks to see how to parse the search command correctly.
> It seems Postfix would work until I encountered something like OR OR A 
> B C D ==> (OR (OR A B) C) D Could anyone point me a direction on how to
implement the Search command when there are multiple ORs?
> Should I even consider using Postfix(RPN) algorithm to parse search
command?

Did you notice that it's also possible to use parenthesis explicitly in the
search query? I implemented it by parsing the search command to a tree
structure and then iterating through the tree. There are quite a lot of
optimizations you can then also do with the tree structure, like first
trying to see if the search can even match the message sequence or UID, next
checking for flags, then checking for slower ones. I'm not sure if there are
any other reasonable ways to even implement it.

BTW. You should test your implementation's RFC compliancy with
http://imapwiki.org/ImapTest======================================
Powered by Rainbow Mail Server 6.0

?????????????????????????????????????????????????????????????????????????????????????
The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential and/or privileged material. If you are not the intended recipient, please contact the sender immediately and destroy the material in its entirety, whether electronic or hard copy. You are notified that any review, retransmission, dissemination or other use of, or taking of any action in reliance upon, this information by persons or entities other than the intended recipient is prohibited. Please consider the environment before printing this email.



