Как разобрать ввод И/ИЛИ в С#?

Я хочу разобрать SQL-подобный ввод, например:

SEX = 'MALE' AND AGE > 20

На основе ввода «sql» я затем просматриваю свой массив элементов С#.

Так, например, выше, я бы искал в своих данных все элементы, у которых для свойства Item.Sex установлено значение «MALE», а их свойство Item.Age больше 20.

Это тривиальный пример, и вы легко можете придумать более сложные сценарии. Например:

(SEX = 'MALE' AND AGE > 20) OR (SEX = 'FEMALE' AND AGE < 30)

Мне нужно иметь возможность поддерживать следующие операторы:

=
>
<
<>
() - for precedence
AND
OR

У меня такое чувство, что в конечном итоге мне придется кодировать это самому с нуля, но я не хочу изобретать велосипед. Немного изучив это, я наткнулся на ссылки на синтаксические анализаторы/грамматику и т. д., но не совсем уверен, что они отвечают всем требованиям.


person Eternal21    schedule 20.09.2012    source источник
comment
Вы можете использовать такие инструменты, как ANTLR (или эквивалент C#) или библиотеку Parser-Combinator (если она есть для C#), чтобы упростить жизнь.   -  person    schedule 20.09.2012
comment
Ознакомьтесь с использованием деревьев выражений msdn.microsoft.com/en-us/library. /bb397951.aspx   -  person Adriaan Stander    schedule 20.09.2012
comment
Демонстрацию ANTLR и C# см. по адресу: stackoverflow .com/questions/4396080/antlr-3-3-c-sharp-tutorials   -  person Bart Kiers    schedule 20.09.2012
comment
@astander Есть ли способ легко перейти от строки к дереву выражений? (Я предположил, возможно, неправильно, что вводом является текст.)   -  person    schedule 20.09.2012
comment
Не то, чтобы я знал, другие предложения здесь кажутся хорошими   -  person Adriaan Stander    schedule 20.09.2012


Ответы (1)


Возможно, вам придется самостоятельно анализировать входные данные, но с помощью генератора синтаксических анализаторов, такого как ANTLR, это не составит большого труда.

person erikkallen    schedule 20.09.2012