Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Описание языка, помогите разработать 
:(
    Опции темы
sandello
Дата 26.10.2005, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 18.5.2005
Где: Пермь

Репутация: нет
Всего: 2



Для валидации запросов понадобилось разработать простенький язык. Запрос представляет собой список пар "атрибут=значение"
Что хочу получить - сам представляю. Осталось формализовать это в виде БНФ а потом настроить javacc

На текущий момент удалось сделать следующее

expression::= exist | equal | alternation | sequence | negation | '(' expression ')'

alternation::= expression '|' expression
sequence::= expression '&' expression
negation::= '!' expression

exist::= '?' attribute -- по идее проверяет наличие атрибута в запросе.
equal::= attribute '=' value
attribute::= 'attr_name0' | 'attr_name1' | ... -- список имеющихся атрибутов
value::= '"' atom '"' -- по идее, value должно содержать описание java regex, для него разбор не надо проводить
atom::= liter [ atom ]
liter:= любой символ кроме "

Что-то нужно поправить?
Вопрос по теории: что из выше перечисленного является терминальными символами, а что нет? Если я правильно понял теорию: терминальные - это value и attribute.
Как можно описать приоритет операторов. Хотелось бы получить (по убыванию): =,(), !, &, |

Это сообщение отредактировал(а) sandello - 26.10.2005, 13:12


--------------------
user posted image
PM MAIL Jabber   Вверх
setq
Дата 26.10.2005, 12:08 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











если я хорошо помню, то терминальные, это те, которые возвращает lex-анализатор. ну там, строки, имена, числа, разные спец. символы.
  Вверх
allex
Дата 26.10.2005, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 5.9.2005

Репутация: нет
Всего: нет



sandello
1. Надо избавиться от левой рекурсии. Одновременно появится и приоритет операторов.
2. С JavaCC я давно ушел на ANTLR. На сайте www.antlr.org есть документация и примеры.
Терминалы - грубо говоря, всё, что не правила. Часть терминалов имеет фиксированный текст (ключевые слова), часть - нет - идентификаторы, например.
PM MAIL   Вверх
sandello
Дата 26.10.2005, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 18.5.2005
Где: Пермь

Репутация: нет
Всего: 2



Цитата(allex @ 26.10.2005, 14:15)
1. Надо избавиться от левой рекурсии. Одновременно появится и приоритет операторов.

Что есть "левая рекурсия"? Можешь пример привести?


--------------------
user posted image
PM MAIL Jabber   Вверх
sandello
Дата 26.10.2005, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 18.5.2005
Где: Пермь

Репутация: нет
Всего: 2



Следующая версия описания языка

expression::=altexp
altexp::= andexp [ '|' altexp ]
andexp::= notexp [ '|' andexp ]
notexp::= [ '!' ] bracesexp
bracesexp::= '(' altexp ')' | equalexp | existexp
equalexp::= attribute '=' value
existexp::= '?' attribute
attribute::= 'attr_name0' | 'attr_name1' | ...
value::= '"' atom '"'
atom::= liter [ atom ]
liter:= любой символ кроме "

забыл добавить. Хотелобы иметь возможноcть использовать разделители в виде пробела (кроме как внутри value) в любом количестве от 0 до *


--------------------
user posted image
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.1081 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.