簡體   English   中英

識別形式語法中有限字符串集合的排列

[英]Recognizing permutations of a finite set of strings in a formal grammar

目標:找到一種正式定義一種語法的方法,該語法可識別任意順序的0或1次集合中的元素。 隨后,我想解析它並生成一個AST。

例如:說用我的語言的有效字符串集是{A, B, C} 我想定義一種語法,以識別任意數量的那些元素的所有有效排列。

語法上有效的字符串包括:

  • (空字符串)
  • A
  • BA ,以及
  • CAB

語法無效的字符串包括:

  • AA ,和
  • BACB

明確地說,出於我的目的,在CFG中明確定義所有可能的排列是不可接受的,因為將無法維護較大的集合。

據我了解,這種語言無法解決上下文無關語言的問題 ,因此解決方案將不是上下文無關或常規的。


更新

我所追求的是一種“置換語言”, Benedek Nagy對其進行了一些理論上的工作,作為對上下文無關語言的擴展。

關於解析器生成器,我只發現了關於使用置換階段( link )實現解析器的話題。 顯然,解析器在生成的CFG的大小上具有指數下限,而且我還沒有找到任何支持它的解析器生成器。

用ANTLR可以解決這個問題。 它使用語義謂詞來“編碼”問題。

假設這組備用字符串是固定的並且事先已知,例如大小n ,則可以得出一個大小為O(n!)的(非上下文無關)語法。 這在漸近上並不比枚舉所有排列小,因此我認為它不能被視為一個好的解決方案。 我認為可以將該語法重新構造為上下文相關的語法 (盡管我在下面建議的形式不是)。

對於問題中提到的示例{a, b, c} ,以下是一種這樣的語法。 按照慣例,我將小寫字母用於終端符號,將大寫字母用於非終端。 S是初始非終結符。

S ::= XabcY
XabcY ::= aXbcY | bXacY | cXabY
XabY  ::= ab | ba
XacY  ::= ac | ca
XbcY  ::= bc | cb

非終結符XY將尚未完成的子字符串括在生產中。 該子字符串最終將被XY之間(以任意順序)給定的末端置換來代替。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM