Форум: "Прочее";
Текущий архив: 2009.10.11;
Скачать: [xml.tar.bz2];
ВнизТкните носом в БНФ грамматику языка Pascal. Найти похожие ветки
← →
oxffff © (2009-08-04 11:48) [0]Заранее спасибо.
← →
oxffff © (2009-08-04 11:51) [1]А лучше в БНФ грамматику Delphi последней версии с поддержкой параметризованных классов.
Я где то видел. Но сейчас не могу найти.
← →
xayam © (2009-08-04 11:51) [2]http://www.devincook.com/goldparser/grammars/index.htm
← →
oxffff © (2009-08-04 11:53) [3]
> xayam © (04.08.09 11:51) [2]
Спасибо большое!!!
← →
xayam © (2009-08-04 12:07) [4]вот кстати исходники редактора для грамматики есть http://xayam.by.ru/Download/GrammarEdit_sources.rar
← →
oxffff © (2009-08-04 12:19) [5]
> xayam © (04.08.09 12:07) [4]
Спасибо.
Мне собственно нужно только грамматика.
← →
Rouse_ © (2009-08-04 13:35) [6]Оффтоп, а ты компилятора на основе какого языка пишешь, разве Pascal?
← →
oxffff © (2009-08-04 14:34) [7]
> Rouse_ © (04.08.09 13:35) [6]
За основу я еще не опредился какой язык взять. Пока читаю и выбираю.
← →
Пит (2009-08-04 14:52) [8]oxffff, а ты пишешь компилятор, а нафига?
← →
oxffff © (2009-08-04 14:54) [9]
> Пит (04.08.09 14:52) [8]
Для общего развития.
← →
Пит (2009-08-04 14:58) [10]
> Для общего развития.
чисто для получения опыта, без практического применения написанного?
← →
oxffff © (2009-08-04 15:00) [11]
> Пит (04.08.09 14:58) [10]
Хочу за границу свалить
← →
oxffff © (2009-08-04 15:04) [12]
> oxffff © (04.08.09 15:00) [11]
>
> > Пит (04.08.09 14:58) [10]
>
>
> Хочу за границу свалить
Это шутка. Останусь в России.
← →
Пит (2009-08-04 15:06) [13]не понял логики в ответе на вопрос в [10] )))
← →
oxffff © (2009-08-04 15:07) [14]
> чисто для получения опыта, без практического применения
> написанного?
NFA, DFA,CYK, LL(1),SLR(0),CLR(1), LALR(1) анализаторы написал.
Теперь хочется собствено как говорится ближе к телу.
Все естественно для опыта. А применение я найду.
Например для обмена в SAP R3 c внешними источниками.
← →
oxffff © (2009-08-04 15:08) [15]
> LALR(1)
LARL(1)
← →
Rouse_ © (2009-08-04 15:09) [16]
> NFA, DFA,CYK, LL(1),SLR(0),CLR(1), LALR(1) анализаторы написал.
> Теперь хочется собствено как говорится ближе к телу.
Молоток :)
Меня дальше правки по мелочи фасмовского компилера не хватило, лень набросилась :)
← →
Игорь Шевченко © (2009-08-04 15:27) [17]А вот если б кто сделал разбор дельфийского кода в абстрактное синтаксическое дерево и с удобными средствами работы с этим деревом (нечто вроде R# (http://rsdn.ru/projects/rsharp/article/rsharp_mag.xml)), да еще с поиском повторяющихся участков, тому бы был респект и уважуха
← →
xayam © (2009-08-04 16:01) [18]
> Игорь Шевченко © (04.08.09 15:27) [17]
> А вот если б кто сделал разбор дельфийского кода в абстрактное
> синтаксическое дерево и с удобными средствами работы с этим
> деревом (нечто вроде R# (http://rsdn.ru/projects/rsharp/article/rsharp_mag.
> xml)), да еще с поиском повторяющихся участков, тому бы
> был респект и уважуха
разбор я сделал (выкладывать не буду), до удобств нет никаких.
← →
Игорь Шевченко © (2009-08-04 16:03) [19]xayam © (04.08.09 16:01) [18]
Разбор есть и в Jedi (Jedi parser), но удобств тоже никаких, потому неудобно
← →
pasha_golub © (2009-08-04 18:22) [20]Удалено модератором
Примечание: Выражения выбираем, не в пивной
← →
pasha_golub © (2009-08-04 18:23) [21]
> Игорь Шевченко © (04.08.09 15:27) [17]
>
> А вот если б кто сделал разбор дельфийского кода в абстрактное
> синтаксическое дерево
Дерево строится. А что подразумевается под удобной работой?
← →
pasha_golub © (2009-08-04 18:24) [22]В хелпе, кстати, есть. Оно?
Goal -> (Program | Package | Library | Unit)
Program -> [PROGRAM Ident ["(" IdentList ")"] ";"]
ProgramBlock "."
Unit -> UNIT Ident [PortabilityDirective] ";"
InterfaceSection
ImplementationSection
InitSection "."
Package -> PACKAGE Ident ";"
[RequiresClause]
[ContainsClause]
END "."
Library -> LIBRARY Ident ";"
ProgramBlock "."
ProgramBlock -> [UsesClause]
.....
← →
oxffff © (2009-08-04 18:30) [23]
> pasha_golub © (04.08.09 18:24) [22]
Оно.
Я как раз видел в helpe. Только в 2009 найти не могу.
← →
pasha_golub © (2009-08-04 18:32) [24]
> oxffff © (04.08.09 18:30) [23]
>
>
> > pasha_golub © (04.08.09 18:24) [22]
>
>
> Оно.
> Я как раз видел в helpe. Только в 2009 найти не могу.
>
Видать убрали. Я подозреваю, что в 2009 она ambiguous и лечится на этапе лексического разбора путем ввода металексем.
← →
Игорь Шевченко © (2009-08-04 18:35) [25]
> А что подразумевается под удобной работой?
методы доступа, очевидно :)
Я вроде как ссылку на R# дал
← →
Rouse_ © (2009-08-04 23:05) [26]
> Игорь Шевченко © (04.08.09 18:35) [25]
> методы доступа, очевидно :)
> Я вроде как ссылку на R# дал
Эмм, я вот не увидел никаких особенных преимуществ сей тулзы перед встроенным в саму среду системы рефакторинга (работаю с 2007-ой дельфи). Игорь - приведи плиз что именно ты хочешь от такой утилиты. Может это все уже давно написано и ты просишь очередной велосипед?
← →
Игорь Шевченко © (2009-08-04 23:56) [27]Rouse_ © (04.08.09 23:05) [26]
Рефакторинг ищет дублирующийся код ? Ткни меня в тот пункт меню, который это делает ?
> Может это все уже давно написано и ты просишь очередной
> велосипед?
Да нет, я имею привычку искать перед тем, как попросить "очередной велосипед".
← →
Rouse_ © (2009-08-05 00:09) [28]
> Рефакторинг ищет дублирующийся код ?
Эмм, глупый вопрос. А он разве был заточен под китайские методы разработки?
Хорошо, вводная: как ты себе представляешь позицию ТЗ по отлавливанию дублирующего кода?
Копипаст - но при копипасте кто-то поставил пробел, или кто-то изменил имя переменной или кто-то поменял местами две идеологически несвязанных строчки кода? Как это искать?
Кстати, а где ты находишь такой код? Ты же вроде не работаешь с фрилансерами и удаленкой :)
← →
Rouse_ © (2009-08-05 00:14) [29]ЗЫ: Даже если парсер будет реагировать на изменения переменных в дублирующемся коде, он устанет обрабатывать строки типа:
for I := 0 to List.Count - 1 do
← →
Игорь Шевченко © (2009-08-05 00:49) [30]
> Кстати, а где ты находишь такой код? Ты же вроде не работаешь
> с фрилансерами и удаленкой :)
Это не твой вопрос, верно ?
> Как это искать?
По совпадению участков синтаксического дерева, очевидно. Там имена (локальных) переменных роли не играют.
> он устанет обрабатывать строки типа
Он железный, ему пофиг.
← →
Дмитрий С © (2009-08-05 03:05) [31]И чтобы еще была база частых логических ошибок и в дереве он их показывал, и чтобы еще исправлял и дописывал по возможности:) вот было бы клево:)
← →
pasha_golub © (2009-08-05 15:31) [32]ну вот я читаю:
Синтаксический и лексический анализаторы C#. Парсер принимает на вход текст, синтаксически (но не обязательно семантически) совместимый с C# 2.0 (спецификацию можно взять здесь: http://download.microsoft.com/download/8/1/6/81682478-4018-48fe-9e5e-f87a44af3db9/Standard.pdf). В процессе разбора исходного кода парсер строит абстрактное синтаксическое дерево (Abstract Syntax Tree, AST). Это дерево можно изменять путем замены (изменения), удаления или добавления узлов. Каждый узел дерева представляет некоторую синтаксическую конструкцию. Например, конструкция: «while (true)» разбирается в дерево, состоящее из оператора (Statement) while и выражения (Expression) true, вложенного в оператор while. Сам по себе оператор while может быть вложен в другой оператор или некоторый метод/свойство.
Ну есть у меня парсер который создает дерево (только для SQL диалекта Postgrses, но любая грамматика годная для YACC может быть скормлена) . Ессно из узлов. Я могу менять, добавлять, удалять узлы вручную ибо узел суть объект класса TNode (али наследник).
Но я хочу узнать может пример какой символизирующий победу разума над скверной
← →
pasha_golub © (2009-08-05 15:37) [33]
> Игорь Шевченко © (05.08.09 00:49) [30]
> По совпадению участков синтаксического дерева, очевидно.
> Там имена (локальных) переменных роли не играют.
Не очевидно, увы. Я такой задачей на днях ломал себе мозг.
Например:
SELECT ((1)) = SELECT 1
Однако при разборе первое будет дважды вложено в некий node <expr> или как там кому хочеться.
Посему стоит задача еще и более глубокого анализа, а это без людских мозгов ну никак. По крайней мере я ни одного diff"a (merge"a) не видел, который бы это рулил влёт.
← →
Inovet © (2009-08-05 15:55) [34]> [33] pasha_golub © (05.08.09 15:37)
> Например:
>
> SELECT ((1)) = SELECT 1
>
> Однако при разборе первое будет дважды вложено в некий node
> <expr> или как там кому хочеться.
>
> Посему стоит задача еще и более глубокого анализа, а это
> без людских мозгов ну никак. По крайней мере я ни одного
> diff"a (merge"a) не видел, который бы это рулил влёт.
А почему и зачем на этапе разбора?
← →
pasha_golub © (2009-08-05 16:01) [35]
> Inovet © (05.08.09 15:55) [34]
>
> > [33] pasha_golub © (05.08.09 15:37)
> А почему и зачем на этапе разбора?
Не понял
← →
Игорь Шевченко © (2009-08-05 16:09) [36]pasha_golub © (05.08.09 15:37) [33]
> SELECT ((1)) = SELECT 1
а что, при разборе скобки не удаляются разве ?
Ты хочешь сказать, что имеющийся парсер разберет два выражения
foo := ((bar)) + 2 и foo := bar + 2
в два разных дерева ?
← →
pasha_golub © (2009-08-05 16:11) [37]Вообще-то, да.
Это ж парсер (у меня), который кушает грамматику как таковую. Если конечно ему добавить действий по этому поводу, то да можно и убрать.
← →
Пит (2009-08-05 16:22) [38]даже в моей примитивной задачке по разбору некоего управляющего выражения, я делал функцию OptimizeToken, которая удаляла "пустые" промежуточные сквозные узлы, в которые и трансформируются скобки.
← →
Игорь Шевченко © (2009-08-05 16:32) [39]
> Вообще-то, да.
Вообще-то это эквивалентные выражения, если что. Код-то должен одинаковый генерироваться
← →
pasha_golub © (2009-08-05 16:34) [40]
> Игорь Шевченко © (05.08.09 16:32) [39]
> ообще-то это эквивалентные выражения, если что. Код-то должен
> одинаковый генерироваться
Код - да. Дерево разбора разное.
Страницы: 1 2 вся ветка
Форум: "Прочее";
Текущий архив: 2009.10.11;
Скачать: [xml.tar.bz2];
Память: 0.55 MB
Время: 0.007 c