Автор Тема: [SL8.2] jflex1.6.1  (Прочитано 2652 раз)

Оффлайн Anh

  • Давно тут
  • **
  • Сообщений: 28
[SL8.2] jflex1.6.1
« : 13.12.2018 01:08:36 »
Хочу создать свой парсер на 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 - нет)

Оффлайн Anh

  • Давно тут
  • **
  • Сообщений: 28
Re: [SL8.2] jflex1.6.1
« Ответ #1 : 17.12.2018 01:13:59 »
Решил добавлением в конец правила:
`[^] {}`

Оффлайн sb

  • Модератор глобальный
  • *****
  • Сообщений: 8 991
Re: [SL8.2] jflex1.6.1
« Ответ #2 : 17.12.2018 06:38:50 »
Если не трудно нажмите одну кнопку, чтобы закрыть тему https://forum.altlinux.org/index.php?topic=1045.msg193310#msg193310