Match на скобки
От: _nn_ www.nemerleweb.com
Дата: 14.10.10 10:53
Оценка:
public macro Test(e) 
syntax("test", e)
{
  match (e)
  {
    | <[ ($p) ]> => <[ ]>
    | _ => Message.FatalError("Error");
  }
}


Этот макрос будет работать для следующего кода:
test a = "a";
test(a = "a");


Как в сопоставлении проверить что есть скобки ?

Более того добавить еще паттерн не помогает:
match (e)
{
  | <[ $p ]> => <[ ]>
  | <[ ($p) ]> => <[ ]> // Сюда никогда не попадаем
  | _ => Message.FatalError("Error");
}
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: Match на скобки
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.10.10 14:11
Оценка: 1 (1)
Здравствуйте, _nn_, Вы писали:

__>Как в сопоставлении проверить что есть скобки ?


Скобки на уровне PExpr не существуют. Если параметров больше одного, то можно использовать кортеж.

Так же можно сделать лексерный макрос. В токенах скобки сворачиваются в группы и там их можно распознать.
Ну, а далее в зависимости от потребностей, или парсить токены в PExpr с помощью MainParser, или разбирать токены вручную.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.