2015-06-17 4 views
0

я использую рамки иронии и у меня есть:идентификатор терминал, за исключением некоторых ключевых слов

IdentifierTerminal variable = new IdentifierTerminal("variable"); 

терминала для идентификации терминала ввода.

Этот переменный терминал может содержать любую строку, за исключением предопределенного списка зарезервированных строк. Этот идентификатор не запускается ни с кавычками, ни с двойными кавычками.

Я хочу что-то вроде:

IdentifierTerminal variable = any contiguos string EXCEPT "event", "delegate"; 

Как я могу применять это правило для данного терминала?

ответ

0

Вы явно указали свои ключевые слова? Если нет, эта страница: https://en.wikibooks.org/wiki/Irony_-_Language_Implementation_Kit/Grammar/Terminals#Keywords покажет вам, как это сделать. Кажется, что вам не нужно явно указывать, что идентификатор не может быть ключевым словом, поскольку анализатор может это понять. Я нашел следующую цитату

Наконец, в большинстве случаев сканер иронии не требует различения ключевых слов и идентификаторов. Он просто маркирует все буквенно-цифровые слова как идентификаторы, оставляя их в синтаксическом анализаторе, чтобы отличать их друг от друга. Некоторые решения на основе LEX пытаются наложить слишком много ответственности на сканер и заставить его распознать не только сам токен, но и его роль в окружающем контексте. Это, в свою очередь, требует значительных перспектив, что делает код сканера довольно сложным. По мнению автора, определение роли маркера лежит на синтаксическом анализаторе, а не на сканере. Сканер должен распознавать токены без какой-либо контекстной информации.

Источник: http://www.codeproject.com/Articles/22650/Irony-NET-Compiler-Construction-Kit

+0

новый IdentifierTerminal ("переменная") => "переменная" только имя этого терминала, а не значение его. Я использую ракурс Ирины для C#. –

+0

Помогает ли мой обновленный ответ? – Matt

+0

Не совсем: я хочу, чтобы мой переменный терминал поймал все строки, за исключением нескольких зарезервированных слов, которые я хочу указать. В документации все наоборот. –

Смежные вопросы