[OCaml] lexer

 
0
 
Functional languages
ava
Kakadu | 16.09.2009, 23:49

{}

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'. Хочу чтобы там было больше. Видимо после просмотра первого токена всё останавливается. Почему?

Наверное надо каждый раз вызывать мою функцию ещё раз внутри каждого разбора случая лексера. Вечером попробую.
Comments (1)
ava
Kakadu | 20.09.2009, 16:30 #
Как я и думал после каждого действия для случая надо вызывать лексер рекурсивно. 
Please register or login to write.
Firm of day
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Contributors
  Kakadu
advanced
Submit