Описание тега parser-combinators

В функциональном программировании комбинатор синтаксического анализатора - это функция высшего порядка, которая принимает несколько синтаксических анализаторов в качестве входных данных и возвращает новый анализатор в качестве выходных данных.
2 ответа

Расширенное управление рекурсивным парсером в Scala

val uninterestingthings = ".".r val parser = "(?ui)(regexvalue)".r | (uninterestingthings~>parser) Этот рекурсивный синтаксический анализатор будет пытаться анализировать "(? Ui)(regexvalue)". R до конца ввода. Является ли в Scala способ запретит…
12 май '10 в 08:47
1 ответ

Добавление номеров строк к ошибкам разбора без непосредственного расширения Positional

Я (наконец) завершил анализатор, который обрабатывает мой DSL и переводит его в мои доменные объекты. Теперь я хочу добавить правильную обработку ошибок и добавить номера строк к ошибкам, сообщенным анализатором. Примеры и ответы, которые я нашел зд…
04 янв '14 в 17:40
1 ответ

Реактивный пример FParsec

Я надеюсь, что кто-то потенциально может опубликовать пример использования FParsec, где данные основаны на каком-то входящем живом потоке. В некоторых примерах может быть получен результат, основанный на жестах мыши, генерирование предупреждения или…
28 мар '12 в 17:53
1 ответ

Приоритет оператора с помощью комбинаторов Scala Parser

Я работаю над логикой синтаксического анализа, которая должна учитывать приоритет операторов. Мои потребности не слишком сложны. Для начала мне нужно умножение и деление, чтобы иметь более высокий приоритет, чем сложение и вычитание. Например: 1 + 2…
4 ответа

Как передать ParseResults другим методам?

void whatever() { // ... val parser = new MyParser val parse = parser.parse(input) if (parse successful) { semanticAnalysis(parse) } } void semanticAnalysis(parse: DontKnowTheCorrectType) { // ... } Какой тип я должен дать формальному параметру pars…
21 авг '12 в 09:33
1 ответ

Разбор строки с последующим преобразованием в другой формат в Scala

У меня есть пропозициональная формула, например, в этом формате строки: (~d \/ x) /\ (y \/ ~b) /\ (~y \/ a \/ b) Я написал парсер вот так: import scala.util.parsing.combinator._ class CNFParser extends JavaTokenParsers with RegexParsers { def expr: …
20 фев '17 в 08:52
0 ответов

Парсер-комбинаторы безопасных типов в Scala

Я был вдохновлен на использование обратной польской записи в качестве примера комбинаторов синтаксического анализа для курса, который я буду преподавать, однако мое решение заканчивается использованием типа List[Any] хранить числа с плавающей запято…
0 ответов

Как получить левые ассоциированные операторы с помощью комбинаторов scala?

Я пробовал /* inside RegexParser class */ def exp : Parser[Exp] = term~addop_chain ^^ {case l~ThenAdd(optype,r) => AritOp(l,optype,r)} def addop_chain : Parser[Exp] = ("+"|"-")~term~addop_chain ^^ {case sym~term~ThenAdd(optype,r) => ThenAdd(sy…
31 мар '13 в 12:34
1 ответ

Выражение типа Parser.Parser[Nonterminal] не соответствует Parser.Parser[TypeParameter]

Я возиться с комбинаторами синтаксического анализатора Scala, и я озадачен ошибкой, которую я не совсем понимаю. Вот соответствующий код: trait ASTNode trait Terminal extends ASTNode trait Nonterminal extends ASTNode case class Identifier(id: String…
05 апр '16 в 08:32
1 ответ

Удовлетворение эквивалентно Парсеку в uu-parsinglib

Я ищу satisfy функционировать как тот, который имеет Parsec. Что-то вроде: --The parser satisfy f succeeds for any character for which the supplied --function f returns True. --Returns the character that is actually parsed. satisfy :: (Char -> Bo…
28 ноя '14 в 16:12
2 ответа

Сочетание лексера и парсера в комбинаторе парсера

Я использую uu-parsinglib, но я думаю, что следующий вопрос является универсальным синтаксического анализатора. Давайте рассмотрим следующий пример: У меня есть лексер с комбинатором pLex, который производит список токенов (типа MyToken). Теперь я х…
1 ответ

Полиморфизм с унаследованными генериками вызывает плохой доступ в Swift

У меня есть два класса, которые наследуются от общего класса. class Parser<I: CollectionType, T> { func parse(ts: I) -> [(T, I)] { return [] } func parse_all(ts: I) -> [(T, I)] { return parse(ts).filter { isEmpty($0.1) } } } class CharPa…
10 ноя '14 в 15:35
1 ответ

Может ли RegexParser поддерживать шаблоны с пробелами в них?

Мы хотим создать шаблоны регулярных выражений с пробелами. Однако это, кажется, противоречит синтаксическому анализу токенов, выполняемому RegexParser: части входного потока символов разбиваются на отдельные токены до того, как отдельные правила (/ …
30 окт '15 в 16:08
1 ответ

Составление комбинаторов парсера Скала во время выполнения

Я видел несколько других сообщений SO, имеющих отношение здесь, предполагающих, что наследование с использованием признаков является единственным выходом из этой проблемы, но я не вижу, как использовать это здесь. Я пишу ассемблер, у которого есть д…
05 июл '18 в 20:44
1 ответ

DSL для реализации бизнес-правил для маршрутизации и обработки сервиса REST

Я надеюсь что Combinator parsers, ( http://debasishg.blogspot.com/2008/04/external-dsls-made-easy-with-scala.html), будет работать над проектом для обработки правил маршрутизации для службы REST, которая реализована с помощью Scalatra( http://tutori…
18 июн '11 в 01:06
0 ответов

Парсерный комбинатор не работает быстро в AST с выбором позиции

Я написал несколько комбинаторов синтаксического анализа для создания AST с информацией о местоположении источника. Профилирование указывает, что по меньшей мере 30% процентов выполнения тратится многократно при разборе ненужной информации для генер…
12 сен '13 в 18:37
1 ответ

Лексировать новые строки в Scala StdLexical?

Я пытаюсь лексировать (затем анализировать) язык, подобный Си. В Си есть директивы препроцессора, где разрывы строк значительны, а затем реальный код, где они просто пробелы. Одним из способов сделать это может быть двухпроходный процесс, подобный р…
14 апр '10 в 08:26
1 ответ

Как сожрать нить до разделителя или до конца с ржавчиной / ном

Я учусь Nom, и в качестве тестового примера я пытаюсь разобрать строку до разделителя. Если мой разделитель, скажем, /тогда я хочу сопоставить все до этого разделителя. Для этого парсер вроде named!(gobbledygook, take_until!("/")); работает. Но я та…
02 янв '19 в 16:13
1 ответ

Использование Keep-Left/ Right комбинатор не работает с конвертером результатов

У меня есть комбинатор и конвертер результатов, который выглядит так: // parses a line like so: // // 2 // 00:00:01.610 --> 00:00:02.620 align:start position:0% // private def subtitleHeader: Parser[SubtitleBlock] = { (subtitleNumber ~ whiteSpace…
13 дек '18 в 21:28
3 ответа

Scala парсер комбинаторы, ошибка на конце строки

Я пытаюсь создать интерпретатор для языка программирования Icon в Scala. Сейчас я работаю над настройкой парсера для него. Код, который я написал до сих пор: package interpreter import scala.util.parsing.combinator.syntactical._ import scala.util.pa…
28 апр '11 в 06:50