Хочу создать свой парсер на jflex (java) (т.е. просто хочу чтобы во входном файле искались заданные токены - regexp выр-я или слова - и вызывалась нужная функция). Возникла такая проблема: созданный парсер определяет только самый первый токен из начала файла, а остальные игнорит (не видит?) - "Error: could not match input" (это стандартное сообщение, когда больше не нашёл). Вопрос: у меня кривые руки или беда со сборкой на альте?
Для теста.
Конфиг записываем в файл test.flex (%debug - версия, чтобы можно было запускать и см. вывод в консоли):
package test;
%%
%debug
%class Test
%public
%final
%unicode
%char
%line
%column
%integer
%%
/*эти два токена будем парсить*/
"bool" {return 1;}
"value" {return 2;}
Файл для парсинга (test.h):
bool value = boolean_t<true>::value;
bool value = boolean_t<false>::value;
bool value = boolean_t<true>::value;
Далее кидаем оба файла в дир. testjflex, например, и генерим там свой парсер test.jar:
mkdir -p test
jflex -d test test.flex
javac test/Test.java
jar cf test.jar test/Test.class
Запускаем:
java -cp test.jar test.Test test.h
И:
line: 1 col: 1 match: --bool--
action [19] { return 1; }
1
Exception in thread "main" java.lang.Error: Error: could not match input
at test.Test.zzScanError(Test.java:448)
at test.Test.yylex(Test.java:630)
at test.Test.main(Test.java:670)
(первый bool нашёл, остальные bool и value - нет)