Perl 6 regels

Perl 6 regels zijn de reguliere expressie, patroonherkenning en algemene doeleinden parsing faciliteit van Perl 6, en zijn een belangrijk onderdeel van de taal. Sinds Perl-patroon dat overeenkomt met constructies van de mogelijkheden van formele reguliere expressies voor enige tijd hebben overschreden, Perl 6 documentatie verwijst naar hen uitsluitend als reguliere expressies, afstand van de term uit de formele definitie.

Perl 6 geeft een superset van Perl 5 eigenschappen met betrekking tot reguliere expressies, vouwen ze in een groter raamwerk genaamd regels die de mogelijkheden van de parsing expressie grammatica bieden, evenals als een sluiting met betrekking tot hun lexicale scope. Regels worden geïntroduceerd met het trefwoord, dat een gebruik vrij gelijkaardig aan subroutine definitie heeft. Anonieme regels kunnen worden ingevoerd met het trefwoord, of gewoon inline worden gebruikt als regexps waren in Perl 5 via de of exploitanten.

Geschiedenis

In Apocalypse 5, een document waarin de voorlopige ontwerp beslissingen voor Perl 6 patroonherkenning, Larry Wall genoemde 20 problemen met de "huidige regex cultuur". Onder deze waren dat Perl reguliere expressies waren "te compact en 'cute' ', had" te veel vertrouwen op te weinig metacharacters "," weinig steun voor de naam vangt "," weinig steun voor grammatica "en" slechte integratie met de' echte ' taal".

Tussen eind 2004 en medio 2005, een compiler voor Perl 6 stijlregels is ontwikkeld voor de Parrot virtuele machine genaamd Parrot Grammatica Engine, die later werd omgedoopt tot de meer generieke, parser grammatica Engine. PGE is een combinatie van runtime en compiler voor Perl 6 stijl grammatica waarmee elke papegaai-gebaseerde compiler om deze tools te gebruiken voor het ontleden, en ook om de regels aan hun runtimes.

Onder andere Perl 6 functies, werd ondersteuning voor de naam vangt aan Perl 5.10 toegevoegd in 2007.

In mei 2012, de referentie-implementatie van Perl 6, Rakudo, verzonden haar Rakudo Star maandelijkse momentopname met een werkende JSON parser volledig gebouwd in Perl 6 regels.

Wijzigingen van Perl 5

Er zijn slechts zes ongewijzigd functies van Perl 5 van reguliere expressies:

  • Letterlijke: woord tekens letterlijk geëvenaard
  • Vastleggen:
  • Alternatieven:
  • Backslash escape:
  • Herhaling kwantoren: ,, en, maar niet
  • Minimal matching achtervoegsel: ,,

Enkele van de meest krachtige toevoegingen zijn:

  • De mogelijkheid om te verwijzen naar het gebruik van regels op te bouwen hele grammatica.
  • Een handvol plegen exploitanten die het mogelijk maken de programmeur backtracking controle tijdens bijpassende.

De volgende wijzigingen sterk verbeteren van de leesbaarheid van reguliere expressies:

  • Vereenvoudigde niet-vastgelegde groepen :, die dezelfde als Perl 5 zijn:
  • Vereenvoudigde code beweringen:
  • Uitgebreide regex formatteren is nu de standaard.

Impliciete veranderingen

Enkele van de functies van Perl 5 reguliere expressies steeds krachtiger in Perl 6 omwille van hun vermogen om de uitgebreide mogelijkheden van de Perl 6 regels in te kapselen. Bijvoorbeeld, in Perl 5, waren positieve en negatieve voorspellende en operators. In Perl 6 bestaan ​​dezelfde functies, maar worden genoemd en.

Omdat kan willekeurige regels kapselen, kan worden gebruikt om voorspellende drukken als syntactische predikaat een grammatica. Bijvoorbeeld, de volgende parsing expressie grammatica beschrijft de klassieke niet-context-vrije taal:

In Perl 6 regels die zou zijn:

Uiteraard krijgt de mogelijkheid om regels code en regelmatig mengen, die nog verder kan worden vereenvoudigd:

Echter, dit maakt gebruik van beweringen, die een subtiel ander concept in Perl 6 regels maar wezenlijk verschillen ontleden theorie, waardoor dit een semantisch plaats syntactische predikaat. Het belangrijkste verschil is in de praktijk prestaties. Er is geen manier voor het rule engine weten welke voorwaarden de stelling kunnen overeenkomen, dus geen optimalisatie van dit proces kan worden gemaakt.

Integratie met Perl

In vele talen, zijn reguliere expressies ingevoerd als strings, die vervolgens worden doorgegeven aan de bibliotheek routines die ontleden en verzamelen ze in een interne toestand. In Perl 5, reguliere expressies deelden enkele van de lexicale analyse met Perl scanner. Deze vereenvoudigde vele aspecten regelmatig gebruik expressie, hoewel het veel complexiteit toegevoegd aan de scanner. In Perl 6, regels deel van de grammatica van de taal. Geen aparte parser bestaat regels, zoals in Perl 5. Dit betekent dat de code ingebed in regels ontleed tegelijkertijd de regel zelf en omgeving code. Zo is het mogelijk om nesten regels code zonder opnieuw een beroep op de parser:

Het bovenstaande is een blok van Perl 6 code die een uiterlijke regel definitie, een innerlijke blok bewering code bevat, en de binnenkant van een reguliere expressie die nog een niveau van bewering bevat.

Uitvoering

Trefwoorden

Er zijn verschillende trefwoorden gebruikt in combinatie met Perl 6 regels:

Hier is een voorbeeld van het typische gebruik:

Modifiers

Modifiers kunnen worden geplaatst na een van de reguliere expressie zoekwoorden, en voordat de begrenzer. Als een reguliere expressie wordt genoemd, de modifier komt achter de naam. Modifiers de controle van de manier waarop reguliere expressies worden ontleed en hoe ze zich gedragen. Ze zijn altijd geïntroduceerd met een leidende karakter.

Enkele belangrijke modifiers omvatten:

  •  of - Voer afstemmen zonder betrekking tot geval.
  •  of - Voer de wedstrijd meer dan één keer op een gegeven doel string.
  •  of - Vervang spaties in de reguliere expressie met een witruimte-matching regel, in plaats van simpelweg te negeren.
  •  - Behandel de reguliere expressie als een Perl 5 reguliere expressie.
  •  - Voer nooit backtracking in de regel.

Bijvoorbeeld:

Grammatica

Een grammatica kan worden gedefinieerd met behulp van de operator. Een grammatica is in wezen slechts een namespace voor regels:

Dit is de grammatica gebruikt om Perl snaar opmaak notatie definiëren.

Buiten deze namespace, kunt u deze regels te gebruiken als volgt:

Een regel op deze manier in feite identiek aan het aanroepen van een subroutine met extra semantiek en bijwerkingen van patroonherkenning.

Voorbeelden

Hier zijn enkele voorbeelden van regels in Perl 6:

Dat laatste is gelijk aan:

(0)
(0)
Commentaren - 0
Geen commentaar

Voeg een reactie

smile smile smile smile smile smile smile smile
smile smile smile smile smile smile smile smile
smile smile smile smile smile smile smile smile
smile smile smile smile
Tekens over: 3000
captcha