|
Тема |
Синтактичен анализ... |
|
Автор | Xpиcтo (Нерегистриран) | |
Публикувано | 31.03.05 20:05 |
|
|
Имам един курсов проект. Условието на задачата е следното:
========================================================
Даден е синтаксис на език в Бакус-Наур форма на описание:
statement ::= ‘SELECT’ Flist ‘FROM’ DataList [ clause]
Flist ::= NAME’.’NAME{‘,’ NAME’.’NAME}
DataList::= NAME { ‘,’ NAME }
agreg::= NAME | function
function ::= ‘max’’(‘Flist ‘)’ | ‘min’’(‘Flist ‘)’ | ‘STR’’(‘NUM ‘)’ | ‘VAL’ ‘(‘ NAME ‘)’
clause ::= ‘WHERE’ logExpr
logExpr::= NAME Oper val { (‘and’ NAME Oper val) | (‘or’ NAME Oper val) }
val ::= NUM | agreg
Oper ::= ‘=’ | ‘<’ | ‘>’ | ‘<>’ | ‘<=’ | ‘>=’ | ‘in’
NUM ::= [0-9]+
NAME ::= [A-Za-z]+
Да се състави програма, която да разпознава произволен низ от този език.
Примерен вход:
SELECT
FA.BA, FB.BA, FC.BB
FROM
BA, BB
WHERE
VarC = 3 and VarB < FA.BA and VarC < max(FB.BA, FC.BB, VarA) and
VarC > min( FB.BA, FC.BB, VarA ) and VarC in FC.BB
==========================================================
Всъщност, програмата трябва само да открива първата грешка в низа (ако има такава).
Насочете ме към някои сайтове, от които мога да науча повече за парсването по принцип (някакви по-универсални алгоритми, които могат да послужат за основа на конкретни задачи).
Разбира се, можете да ми дадете идеи и за моята задача.
|
| |
|
|
|