2008-11-21 4 views
2

Я должен определить грамматику файла, как показано ниже.Как указать точное количество токенов в ANTLR?

// Пример файла
NameCount = 4
Имя = а
Имя = б
Name = с
Name = d
// Конец файла

Теперь я могу определить токены для NameCount и Название. Но я должен определить структуру файла, включая действительное количество экземпляров токена Имя, которое является значением после NameCount. У меня значение анализируется и преобразуется в целое число и сохраняется в переменной в глобальной области грамматики (скажем, в переменной nc).

Как определить в грамматике, что Имя следует повторить точно пс раз?

ответ

6

Это не может быть выражено в самой грамматике. Если число было исправлено, вы могли бы выразить количество ожидаемых токенов. Но токен-ток изменяется в зависимости от значения. Что вы можете сделать, так это включить это в комбинацию лексера/парсера. Но вы не можете создать эту конструкцию просто синтаксисом простой грамматики. Вы, вероятно, хотите что-то по линиям

grammar test; 

@members { 
    private int count = 0; 
    private int names = 0; 
} 

file 
    : count (name)+ 
     { 
     if (count != names) throw new Exception(""); 
     } 
    ; 

count 
    : 'NameCount' EQ Number 
     { 
     count = Integer.parseInt($Number.text); 
     } 
    ; 

name 
    : 'Name' EQ Value 
     { 
     names++; 
     } 
... 
1

Я не уверен, что это контекстная свободная грамматика. Если это не так, вы не можете сказать ANTLR для анализа языка.