Описание тега 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…
18 июл '12 в 02:36
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] хранить числа с плавающей запято…
02 апр '14 в 08:46
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). Теперь я х…
13 авг '13 в 16:17
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