Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Сокровищница
  
 

Фильтр по датам

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
  
 
Во Флориде и в Королевстве сейчас  08:08[Войти] | [Зарегистрироваться]

Парсер комбинированных выражений

Игорь Серебренников
дата публикации 22-01-2002 18:37

Парсер комбинированных выражений

Долго искал парсер и компилятор комбинированных выражений, но так и не нашел - только математика. Пришлось сделать самому.

Парсер вычисляет любые выраженя, состоящие из констант, функций и знаков действий (операций) между ними. Костанты четырех типов - целочисленные, вещественные, строки и логические. Операции - какие душе угодно, функции - тоже. Результатом вычислений является запись - упрощенный аналог типа Variant (нужно было для переноса на C++).

Примеры выражений:
2**2+4
"Pi is "+3.14
'The bool expression is ' + iif(2>3 && !('A' < 'B'), "True", "False")
"Html YELLOW is ""#" + Hex(0xff  << 16, 2)+Hex(0xff << 8, 2)+Hex(0, 2)+'"'
1. Парсер работает с четырьмя типами выражений
  • - число double (123.456)
  • - число integer (123, 0xff)
  • - булево true/false
  • - строка ( "a string", 'a string', " a ""string""")
2. Парсер допускает вызов функций
Опрерации, приоритеты
Op  U/B Pr  Comment

-   U       Изменение знака числа
+   B       Сложение чисел, конкатенация строк
-   B       Вычитание одного числа из другого
*   B       Перемножение чисел
/   B       Деление чисел
**  B       Возведение в степень
%   B       Остаток от деления

~   U       Побитная инверсия целого числа
|   B       or двух целых чисел
&   B       and двух целых чисел
^   B       xor двух целых чисел
>>  B       побитный сдвиг вправо
<<  B       побитный сдвиг влево

!   U       логическое NOT
||  B       логическое OR
&&  B       логическое AND
^^  B       логическое XOR

<   B       сравнения агрументов
>   B
==  B
!=  B
<=  B
>=  B

Скачать исходные коды: Parser.zip (11K)




Смотрите также материалы по темам:
[Синтаксический анализ, разбор выражений, парсинг] [Математические функции]

 Обсуждение материала [ 11-06-2009 07:19 ] 6 сообщений
  
Время на сайте: GMT минус 5 часов

Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
Функция может не работать в некоторых версиях броузеров.

Web hosting for this web site provided by DotNetPark (ASP.NET, SharePoint, MS SQL hosting)  
Software for IIS, Hyper-V, MS SQL. Tools for Windows server administrators. Server migration utilities  

 
© При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
Все используемые на сайте торговые марки являются собственностью их производителей.

Яндекс цитирования