簡體   English   中英

Java中語法解析器的正則表達式

[英]Regular expression for Syntax parser in Java

我需要一個Java語法解析器的正則表達式,使其與我的編程語言語法相匹配,如下所示:

Variable1={1,2,3}
Variable2=Variable1+{4,5,6}+{}*{2}
Variable3=(Variable2+{1})*Variable1
?Variable3 
?{1,2,3}
?Variable3+{1,2,3}

變量的表達式分配包含“ =”,並且評估以“?”開頭 標志。 在圓括號內,您可以定義一個新表達式,但是新表達式可以再次包含圓括號,因此就像遞歸正則賦值,這種方式是不可能的:

String IdPattern = "[a-zA-Z][a-zA-Z0-9]*";            
String SePattern ="\\{"+"([0-9]*)(\\,[0-9]+)*"+"\\}";  


// Problem at next line:
   String CoPattern  = "\\(" + ExPattern + "\\)";   
// CoPattern depends on 
// Expattern, which depends on TePattern, 
// which depends on FaPattern, which depends on CoPattern again.

String FaPattern= "("+IdPattern+"|"+SePattern+"|"+CoPattern+")";              
String TePattern = FaPattern + "("+ "\\*"+ FaPattern+ ")*" ;   
String ExPattern= "" + TePattern + "(" + "\\+"+ TePattern+")*";  


String AsPattern =  "("+IdPattern+"="+ExPattern+")";  
String PriPattern = "(\\?"+ExPattern +")";                     
String StaPattern = "("+AsPattern+"|"+PriPattern+")";    
String Pro = StaPattern+"$";       
System.out.println("Input=((({20}+{1,2,3})))".matches(Pro));

這里的問題是CoPattern依賴於ExPattern,而ExPattern依賴於FaPattern,FaPattern再次依賴於CoPattern本身。 那我該如何做呢?

在括號內,您可以定義一個新表達式,但是新表達式可以再次包含括號,因此就像遞歸正則賦值,這是不可能的:

您自己想過:它似乎不起作用。

因此,簡單的答案是:在這里,正則表達式是一個不足的工具。 您應該非常考慮構建一個真正的解析器。

不僅由於嚴格的概念限制,請參見此處的示例。 但由於:建立一個解析器比匹配輸入 編譯器/解析器的一個關鍵要素是就無效輸入提供反饋 正則表達式為您提供二進制“匹配”與“不匹配”答案。 但是作為程序員,您將不會被告知“您的輸入無效,並且很可能出現的一個問題是,這里缺少括號,那里的標識符無效 ”。

所以,即使你以某種方式獲取 的方式為你工作,它會給你只是一個二進制的答案。 並且:“概念驗證”與擁有合理,強大的基礎可以建立基礎。

這是您的項目,您的“新語言”。 您應該了解圍繞它的工具的任何部分。 從那里開始,“我已經看到超級復雜的正則表達式可以解決我的問題,有人可以適應我的需求”……顯然不是一個好的起點。

正則表達式是一個非常有用的導入工具,但必須謹慎使用。 我個人的經驗法則是:當您的正則表達式非常復雜,以至於您需要其他人向您解釋它時,甚至為您寫下來……然后考慮不使用正則表達式。 因為您可能不在聯盟之列。 您將是必須維護該代碼的人。

暫無
暫無

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

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