powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / ПОМОГИТЕ,пожалуйста,написать файлы LEX и YACC для команды JOIN!!!!!!!срочно нужно..
1 сообщений из 1, страница 1 из 1
ПОМОГИТЕ,пожалуйста,написать файлы LEX и YACC для команды JOIN!!!!!!!срочно нужно..
    #37774224
alina_91
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!!!ПОМОГИТЕ,пожалуйста,написать файл LEX и файл YACC для команды join!!!Вот описание самой команды:
Команда JOIN
Создает новую таблицу, объединяя две существующие таблицы.
Синтаксис

JOIN WITH nWorkArea | WITH cTableAlias
TO FileName
FOR lExpression
[FIELDS FieldList]
[NOOPTIMIZE]

Параметры

WITH nWorkArea

Задает номер рабочей области второй таблицы.
WITH cTableAlias

Задает псевдоним второй таблицы.

TO FileName

Задает имя новой таблицы, которую нужно создать объединением таблиц.

FOR lExpression

Задает условие, согласно которому новая запись будет внесена в
новую таблицу только в случае, если значение выражения lExpression ѕ "истина" (.T.). Если значение lExpression ѕ "ложь" (.F.), новая запись в новую таблицу не заносится.

Замечание Технология Rushmore оптимизирует запрос, формируемый командой JOIN ... FOR, если lExpression является оптимизируемым выражением. В целях повышения производительности рекомендуется использовать в предложении FOR оптимизируемое выражение. Подробнее об этом см. описание команды SET OPTIMIZE или главу 16 "Оптимизация приложений" Руководства разработчика.

FIELDS FieldList
Задает список полей, которые следует включить в новую таблицу. Список FieldList может содержать имена полей как из таблицы, открытой в текущей рабочей области, так и из второй таблицы, открытой в другой рабочей области.

NOOPTIMIZE

Запрещает оптимизацию операции JOIN по технологии Rushmore. Подробнее об этом см. темы SET OPTIMIZE и Основы технологии Rushmore или главу 17 "Оптимизация приложений" Руководства разработчика.
Комментарии
Команда JOIN создает новую таблицу из двух таблиц: таблицы, которая открыта в выбранной в данный момент рабочей области, и второй таблицы, которая открыта в другой области, определенной номером рабочей области или псевдонимом.
Команда JOIN устанавливает указатель записи на первой записи таблицы, открытой в текущей рабочей области, и проходит по всем записям второй таблицы. Всякий раз, когда для записи из второй таблицы условие lExpression оказывается истинным, в новую таблицу включается очередная запись. После этого указатель записи перемещается к следующей записи в таблице,открытой в текущей рабочей области, и процесс повторяется.


а вот что у меня есть на данный момент:
(lex) joinwitx.txt :
%{
#include <y.tab.h.>
extern int yylval;
%}
%%
[Jj][Oo][Ii][Nn] {printf("join\n",yytext);
return JOIN;}
[Ww][Ii][Tt][Hh] {printf("with\n",yytext);
return WITH;}
[Tt][Oo] {printf("to\n",yytext);
return TO;}
[Ff][Oo][Rr] {printf("for\n",yytext);
return FOR;}
[Nn][Oo][Oo][Pp][Tt][Ii][Mm][Ii][Zz][Ee] {printf("nooptimize\n",yytext);
return NOOPTIMIZE;}

[A-Za-z][A-Za-z0-9]* {printf("identifikator\n",yytext);
return IDENT;}
">=" {printf(">=\n",yytext);
return BR;}
"<=" {printf("<=\n",yytext);
return MR;}
"<" {printf("<\n",yytext);
return M;}
">" {printf(">\n",yytext);
return B;}
"!=" {printf("!=\n",yytext);
return NR;}
"=" {printf("=\n",yytext);
return RR;}
. {printf("simvol\n",yytext);
return SYM;}
[0-9]+ {printf("%s\n",yytext);
return NUM;}
\n printf("%s\n",yytext);
[ \t]+ ;
%%


(yacc) joinwithyacc.txt: (не знаю,как здесь описать логическое выражение lexpr)
%token JOIN
%token WITH
%token TO
%token FOR
%token NOOPTIMIZE
%token SYM
%token NUM
%token IDENT
%token BR
%token MR
%token B
%token M
%token NR
%token RR
%%
list: |
list stat '\n' |
list stat error '\n' {yyerror("синтаксическая ошибка");}
stat: JOIN WITH area TO file FOR lexpr field noopt
area: NUM|
IDENT
file: IDENT
field: |
IDENT|
field ',' IDENT
noopt: |
NOOPTIMIZE
lexpr: lexpr: '(' lexpr ')' |
%%
main()
{
return(yyparse();)
}
#include<stdio.h>
yyerror(s) char*s;
{
fprintf(stderr,"%s\n",s);
}

Возможно,у меня куча ошибок..ПОМОГИТЕ,ПОЖАЛУЙСТА!!!!!!!

Модератор: Тема перенесена из форума "C++".
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / ПОМОГИТЕ,пожалуйста,написать файлы LEX и YACC для команды JOIN!!!!!!!срочно нужно..
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]