|
|
|
ПОМОГИТЕ,пожалуйста,написать файлы LEX и YACC для команды JOIN!!!!!!!срочно нужно..
|
|||
|---|---|---|---|
|
#18+
Здравствуйте!!!ПОМОГИТЕ,пожалуйста,написать файл 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++". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2012, 14:10 |
|
||
|
|

start [/forum/topic.php?desktop=1&fid=16&tid=1342293]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
168ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
19ms |
get tp. blocked users: |
1ms |
| others: | 214ms |
| total: | 439ms |

| 0 / 0 |
