Pest control : a formal model of Pest parser generator.

Abstract

Programa de Pós-Graduação em Ciência da Computação. Departamento de Ciência da Computação, Instituto de Ciências Exatas e Biológicas, Universidade Federal de Ouro Preto.Parsing Expression Grammars (PEGs) are a recognition-based formalism for defin-ing parsers, introduced as an alternative to context-free grammars (CFGs). Un-like CFGs, PEGs describe parsing as a top-down deterministic process, where the grammar defines how to recognize valid strings rather than how to generate them. This approach eliminates ambiguity, since every PEG defines exactly one possi- ble parse for each valid input. Despite this determinism, PEGs are not free from problems. Some grammars may result in non-terminating behavior, where recursive rules can cause infinite parsing loops. To address this issue, a type system for PEGs was proposed, capable of detecting and preventing such problematic constructions by associating types with parsing expressions and ensuring that recursive calls are well-founded. Among the implementations of PEG-based parsers, the Pest parser generator, written in Rust, stands out for its expressiveness and practical relevance. Pest extends the classical PEG formalism by introducing stack-based operators—such as push, pop, and peek—which allow the grammar to manipulate a stack ofsemantic values during parsing. This feature makes Pest more powerful and suitable for real-world language specifications, but it also introduces new challenges for type safety and termination guarantees. In this work, we formalize the semantics of these new Pest-specific operators within the theoretical framework of PEGs. Furthermore, we propose an extension to the existing type inference algorithm, enabling it to han-dle stack-based constructs while preserving the main property of the type system: ensuring that all well-typed grammars are free from infinite loops. Our formalization contributes to a safer and more rigorous foundation for the Pest parser generator and to the broader understanding of type systems for parsing expression grammars.As Gramáticas de Expressões de Análise (PEGs) são uma formalização baseada em reconhecimento para a definição de analisadores, proposta como alternativa às gramáticas livres de contexto (CFGs). Diferentemente das CFGs, as PEGs descrevem a análise como um processo determinístico top-down, no qual a gramática específica como reconhecer cadeias válidas, e não como gerá-las. Esse determinismo elimina a ambiguidade, pois cada PEG define uma única análise para cada entrada válida. No entanto, PEGs podem apresentar problemas de não terminação, causados por regras recursivas que levam a loops infinitos. Para lidar com essa limitação, foi proposto um sistema de tipos capaz de identificar e impedir tais construções, associando tipos às expressões de análise e garantindo que as chamadas recursivas sejam bem fundamentadas. Entre os analisadores baseados em PEG, destaca-se o Pest, um gerador escrito em Rust que estende a formalização clássica ao introduzir operadores baseados em pilha, como push, pop e peek. Esses operadores aumentam a expressividade da linguagem, mas também introduzem novos desafios para a segurança de tipos e a garantia de terminação. Neste trabalho, formalizamos a semântica desses operadores no contexto das PEGs e propomos uma extensão do algoritmo de inferência de tipos existente, de modo a acomodar construções baseadas em pilha sem perder a garantia de que toda gramática bem tipada e livre de loops infinitos. Essa contribuição fortalece a base teórica do Pest e amplia a compreensão dos sistemas de tipos para PEGs

Similar works

Full text

This paper was published in RIUFOP (Univ. Federal de Ouro Preto).

Having an issue?

Is data on this page outdated, violates copyrights or anything else? Report the problem now and we will take corresponding actions after reviewing your request.