Текст ошибки Er is een onverwachte fout opgetreden.
исходит от сервера AFAS, однако весь трассировочный стек ошибки не передается через API. Следовательно, вы должны проверить в Profit Windows в Omgevingslogboek
, что влечет за собой полный стек трассировки ошибки. Зайдите в Startmenu F4 / Algemeen / Omgeving / Beheer / Omgevingslogboek
Не стесняйтесь зарегистрироваться в Центре поддержки AFAS или connect.afas.nl, если вам нужна дополнительная помощь.
РЕДАКТИРОВАТЬ: Проверьте этот репозиторий на GitHub с библиотекой plug-and-play для AFAS AppConnector.
Синтаксический анализатор Scala - это синтаксический анализатор с возвратом, поэтому он может иметь дело практически с любыми BNF или EBNF. Однако это также означает, что есть крайние случаи, когда ввод может быть очень медленным для чтения.
Если грамматику можно изменить на LL (1) грамматику , вы можете использовать ~! , чтобы свести к минимуму возврат.
Грамматика, вероятно, МОЖЕТ быть преобразована в LL (1), но, как написано, это не так. См., Например, что у Expression и Statement есть конфликты «первый / первый» (см. Это в конце связанной статьи).
В любом случае, для академического проекта этого достаточно. Для реальных компиляторов вам потребуются более быстрые парсеры.
Я никогда не использовал Scala, но существование категорического BNF делает это легким.
Тривиально переведенный в текст Haskell. ParserCombinators. Парсек:
goal = do c <- mainClass
cs <- many classDeclaration
eof
return $ c:cs
mainClass = do token "class"
name <- identifier
...
и т.д. перевод PArrows довольно тривиален также. Вы, вероятно, найдете легче иметь отличную lexing фазу перед синтаксическим анализатором, но можно обойтись без также.
Я использую синтаксический анализатор Scala combinators для парсинга МН / кода SQL, он работает как очарование.
Программирование в Scala (p. 647), говорит:
Это [синтаксический анализатор Scala combinator платформа] намного легче понять и адаптироваться, чем парсер-генератор, и различие в скорости часто не имело бы значения на практике, если Вы не хотите проанализировать очень большие исходные данные.
Поскольку я не классифицировал бы исходный код как очень большой вход (идеально), это должно быть достаточно.
По крайней мере, Парсек имеет встроенный лексический анализатор для подобных Java языков:
lexer = makeTokenParser javaStyle
Необходимо определить зарезервированные слова сами.
Я не имел дело с синтаксическим анализатором Scala или Haskell combinator библиотеки, но похоже, что грамматика должна быть прекрасной.