Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

Support struct-like variants in `parser.py`

Aperta
#696 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
45/100
Tipo di issue
Funzionalità
Chiarezza
Abbastanza chiara
Stato di attività
Ferma
Stack tecnologico
python
Ambito
compilers

Direzione di ricerca

Inizia da parser.py e confronta la gestione esistente delle enum variants con gli esempi di VariantsShape nell’issue. Determina come i campi Single e Multiple vengono mappati nella K syntax del parser, quindi verifica che entrambe le forme struct-like siano accettate e rappresentate correttamente. L’implementazione ideale rimuove gli mk constructors intermedi quando possibile.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

Consider

pub enum VariantsShape {
    Single { index: VariantIdx },
    Multiple {
        tag: Scalar,
        tag_encoding: TagEncoding,
        tag_field: usize,
        variants: Vec<LayoutShape>,
    },
}

This can be modeled with proper parser support in K as follows:

syntax VariantsShape ::= variantsShapeSingle(VariantsShapeSingle)     [group(mir-enum), symbol(VariantsShape::Single)]
                       | variantsShapeMultiple(VariantsShapeMultiple) [group(mir-enum), symbol(VariantsShape::Multiple)]

syntax VariantsShapeSingle ::= mk(index: VariantIdx) [group(mir---index)]

syntax VariantsShapeMultiple ::= mk ( tag: Scalar
                                    , tagEncoding: TagEncoding
                                    , tagField: MIRInt
                                    , variants: LayoutShapes
                                    ) [group(mir---tag--tag-encoding--tag-field--variants)]

The ideal solution would be to eliminate the mk constructors, and model the struct-like variants directly, e.g.:

syntax VariantsShape ::= variantsShapeSingle(index: VariantIdx) [group(mir-enum---index), symbol(VariantsShape::Single)]
                       | variantsShapeMultiple ( tag: Scalar
                                               , tagEncoding: TagEncoding
                                               , tagField: MIRInt
                                               , variants: LayoutShapes
                                               ) [group(mir-enum---tag--tag-encoding--tag-field--variants), symbol(VariantsShape::Multiple)]
Lingua principale
Python
Stelle
55
Fork
5
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Preparare l'ambiente

Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di runtimeverification/mir-semantics

Tutte le issue di runtimeverification/mir-semantics

Issue simili

Altre issue su Python

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.