Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [OCaml] lexer, почему так работает? 
V
    Опции темы
Kakadu
Дата 16.9.2009, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 273
Регистрация: 19.3.2008

Репутация: нет
Всего: 7



Код

{}

rule token = parse 
        | ' ' { print_endline "Space" } 
        | '(' {
                            print_endline "L_BRA"
                    }
        | ')' {
                        print_endline "R_BRA"
            }
        (* предметная переменная *)    
        | ['a'-'z']? {
            
            }
        (* имя предиката *)    
        | ['A'-'Z']? {
                    print_endline "Predicate"
            }
        | ['!'] {
                    print_endline "Unary operator"
            }
        | "&" |  "=>" {
                    print_endline "Binary operator"
            }
{
    let main () =
        let lexbuf = Lexing.from_channel (open_in "input") in
            (token lexbuf)

    let _ = Printexc.print main ()
    }

Входной файл 'input' такой 
Код

! a & b

На выходе получаю фразу 'Unary operator'. Хочу чтобы там было больше. Видимо после просмотра первого токена всё останавливается. Почему?

Наверное надо каждый раз вызывать мою функцию ещё раз внутри каждого разбора случая лексера. Вечером попробую.


Это сообщение отредактировал(а) Kakadu - 17.9.2009, 15:54


--------------------
Добрые мариносы долго кормили украдкой маленьких зерлингов. От этой украдки зерлинги пухли и дохли
PM MAIL   Вверх
Kakadu
Дата 20.9.2009, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 273
Регистрация: 19.3.2008

Репутация: нет
Всего: 7



Как я и думал после каждого действия для случая надо вызывать лексер рекурсивно. 


--------------------
Добрые мариносы долго кормили украдкой маленьких зерлингов. От этой украдки зерлинги пухли и дохли
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума «Функциональные языки: общие вопросы»
Void
  • Пожалуйста, создавайте темы с содержательными названиями. Если у Вас вопрос по конкретному языку, укажите его в заголовке, например: «[Haskell] Как использовать монаду State».
  • Уважаемые учащиеся, здесь всегда рады помочь Вам, но не делать за Вас вашу работу. У вас гораздо больше шансов получить помощь, если Вы приложите усилия и поделитесь с нами проблемами и результатами. В противном случае добро пожаловать в раздел Центр Помощи.
  • Получив ответ на интересующий Вас вопрос, не забудьте пометить его как решённый.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Void.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Функциональные языки: общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0406 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.