Здравствуйте, zoo1982, Вы писали:
Z>А как вам такая задачка? Хотите голову поломать?
Z>Consider the following grammar rules. Z><Expr> ::= <IntersectExpr> | '0' Z><IntersectExpr> ::= <UnionExpr> | <Intersect> Z><Intersect> ::= '(' <UnionExpr> '*' <Expr> ')' Z><UnionExpr> :== <RegionExpr> | <Union> Z><Union> :== '(' <RegionExpr> '+' <Expr> ')' Z><RegionExpr> :== <Coordinate> 'x' <Coordinate> Z><Coordinate> :== '1'..'9'
Z>Which of the following input strings correspond to the production '<Expr>'?
Z>1) (4x8+8x4+8x8) Z>2) ((2x3+4x5)*0) Z>3) (2x3+8x98)*(2x3+0) Z>4) ((0*0)+2) Z>5) ((1..9)) Z>6) ((4x8*4x9)+0x3
Вот это как раз совершенно нормальная задача, если знать, что такое EBNF.
Если я внимательно смотрел, то соответствуют выражения под номерами 1, 2, 3 и 6.
номер 4 не подходит: '2' (<Coordinate>) входит только в конструкцию <RegionExpr>, а тут символ '+', а не 'х'.
номер 5 не подходит: символа '.' вообще нет в данном синтаксисе.
Здравствуйте, Kh_Oleg, Вы писали:
K_O>Вот это как раз совершенно нормальная задача, если знать, что такое EBNF. K_O>Если я внимательно смотрел, то соответствуют выражения под номерами 1, 2, 3 и 6. K_O>номер 4 не подходит: '2' (<Coordinate>) входит только в конструкцию <RegionExpr>, а тут символ '+', а не 'х'. K_O>номер 5 не подходит: символа '.' вообще нет в данном синтаксисе.
Здравствуйте, Alex Dav, Вы писали:
K_O>>Вот это как раз совершенно нормальная задача, если знать, что такое EBNF. K_O>>Если я внимательно смотрел, то соответствуют выражения под номерами 1, 2, 3 и 6. K_O>>номер 4 не подходит: '2' (<Coordinate>) входит только в конструкцию <RegionExpr>, а тут символ '+', а не 'х'. K_O>>номер 5 не подходит: символа '.' вообще нет в данном синтаксисе.
AD>ну вот кто то опять пятерку за лабу получит
Даже если и так — я от того не обеднею, он не разбогатеет, а мозги тренировать полезно.
K_O>Вот это как раз совершенно нормальная задача, если знать, что такое EBNF. K_O>Если я внимательно смотрел, то соответствуют выражения под номерами 1, 2, 3 и 6. K_O>номер 4 не подходит: '2' (<Coordinate>) входит только в конструкцию <RegionExpr>, а тут символ '+', а не 'х'. K_O>номер 5 не подходит: символа '.' вообще нет в данном синтаксисе.
K_O>>Вот это как раз совершенно нормальная задача, если знать, что такое EBNF. K_O>>Если я внимательно смотрел, то соответствуют выражения под номерами 1, 2, 3 и 6. K_O>>номер 4 не подходит: '2' (<Coordinate>) входит только в конструкцию <RegionExpr>, а тут символ '+', а не 'х'. K_O>>номер 5 не подходит: символа '.' вообще нет в данном синтаксисе.
Z>А что такое EBNF?
E — не знаю что такое
но BNF — "Бекус-Наур форм" типа
Надеюсь, что нигде не ступил при решении. У меня тоже толь 2-й вариант подошёл.
Условие задачи представляет собой описание грамматики некоего языка.
Решается достаточно несложно. Берёшь примеры по порядку и начинаешь просматривать правила из условия и искать несоответсвия.
К примеру,
5) ((1..9))
не подходит потому хотя бы, что нигде не определено '..' и к тому же цифры могут записываться только через 'x' и это показано в вот этих двух строчках: <RegionExpr> :== <Coordinate> 'x' <Coordinate>
<Coordinate> :== '1'..'9'
Здравствуйте, Kh_Oleg, Вы писали:
K_O>Здравствуйте, zoo1982, Вы писали:
Z>>А как вам такая задачка? Хотите голову поломать?
Z>>Consider the following grammar rules. Z>><Expr> ::= <IntersectExpr> | '0' Z>><IntersectExpr> ::= <UnionExpr> | <Intersect> Z>><Intersect> ::= '(' <UnionExpr> '*' <Expr> ')' Z>><UnionExpr> :== <RegionExpr> | <Union> Z>><Union> :== '(' <RegionExpr> '+' <Expr> ')' Z>><RegionExpr> :== <Coordinate> 'x' <Coordinate> Z>><Coordinate> :== '1'..'9'
Z>>Which of the following input strings correspond to the production '<Expr>'?
Z>>1) (4x8+8x4+8x8) Z>>2) ((2x3+4x5)*0) Z>>3) (2x3+8x98)*(2x3+0) Z>>4) ((0*0)+2) Z>>5) ((1..9)) Z>>6) ((4x8*4x9)+0x3
K_O>Вот это как раз совершенно нормальная задача, если знать, что такое EBNF. K_O>Если я внимательно смотрел, то соответствуют выражения под номерами 1, 2, 3 и 6. K_O>номер 4 не подходит: '2' (<Coordinate>) входит только в конструкцию <RegionExpr>, а тут символ '+', а не 'х'. K_O>номер 5 не подходит: символа '.' вообще нет в данном синтаксисе.
Так, я немножко ошибся — вариант 3 тоже не подходит, поскольку в данном синтаксисе допускаются только одиночные цифры. Но вот интересует мнение тех, у кого ответ "только 2", почему не подходит, скажем вариант 1?
Здравствуйте, zoo1982, Вы писали:
Z>А как вам такая задачка? Хотите голову поломать?
Z>Consider the following grammar rules. Z><Expr> ::= <IntersectExpr> | '0' Z><IntersectExpr> ::= <UnionExpr> | <Intersect> Z><Intersect> ::= '(' <UnionExpr> '*' <Expr> ')' Z><UnionExpr> :== <RegionExpr> | <Union> Z><Union> :== '(' <RegionExpr> '+' <Expr> ')' Z><RegionExpr> :== <Coordinate> 'x' <Coordinate> Z><Coordinate> :== '1'..'9'
Z>Which of the following input strings correspond to the production '<Expr>'?
Z>1) (4x8+8x4+8x8) Z>2) ((2x3+4x5)*0) Z>3) (2x3+8x98)*(2x3+0) Z>4) ((0*0)+2) Z>5) ((1..9)) Z>6) ((4x8*4x9)+0x3
1)Не подходит так как в скобках может быть только один оператор
2)Подходит
3)не подходит так как все опреаторы должны быть в скобках
4)не походит как как 2 — неправильный символ в этой граммтике, отдельно висящий допускается только '0'
5)понятно что не подходит
6)вообще непарные скобки, кроме того 0x3 — неверный символ, нуля не должно быть
Здравствуйте, Kh_Oleg, Вы писали:
K_O>Здравствуйте, zoo1982, Вы писали:
Z>>А как вам такая задачка? Хотите голову поломать?
Z>>Consider the following grammar rules. Z>><Expr> ::= <IntersectExpr> | '0' Z>><IntersectExpr> ::= <UnionExpr> | <Intersect> Z>><Intersect> ::= '(' <UnionExpr> '*' <Expr> ')' Z>><UnionExpr> :== <RegionExpr> | <Union> Z>><Union> :== '(' <RegionExpr> '+' <Expr> ')' Z>><RegionExpr> :== <Coordinate> 'x' <Coordinate> Z>><Coordinate> :== '1'..'9'
K_O>Вот это как раз совершенно нормальная задача, если знать, что такое EBNF. K_O>Если я внимательно смотрел, то соответствуют выражения под номерами 1, 2, 3 и 6.
Ключевой момент выделен. Разобраться в описании Бэкуса-Науэра при наличии времени проблем не составляет. Но если человек не работал с EBNF каждый день на протяжении нескольких лет, да еще на собеседовании будет мало времени и кандидат скорее всего будет волноваться, то найти решение может быть далеко не просто.
В качестве подтверждения, могу сказать, что даже здесь в ветке уже несколько вариантов ответов, и это люди отвечали в спокойной обстановке, а не на собеседовании.
UNIX way — это когда тебе вместо туалетной бумаги дают топор, рубанок и карту близлежащего леса
Упростили грамматику для облегчения восприятия примера 1.
Z>>>1) (4x8+8x4+8x8)
K_O>...вот интересует мнение тех, у кого ответ "только 2", почему не подходит, скажем вариант 1?
Z>>><Union> :== '(' <RegionExpr> '+' <Expr> ')'
( 4x8 + 8x4+8x8 ) => 8x4+8x8 должно быть Expr, а Expr "с плюсиками" должно быть в скобках.
Здравствуйте, SergeCpp, Вы писали:
K_O>>...вот интересует мнение тех, у кого ответ "только 2", почему не подходит, скажем вариант 1?
Z>>>><Union> :== '(' <RegionExpr> '+' <Expr> ')'
SC>( 4x8 + 8x4+8x8 ) => 8x4+8x8 должно быть Expr, а Expr "с плюсиками" должно быть в скобках.