解析語法時,是否應該使用RegEx來匹配可以表示爲常規語言的語法,還是應該使用當前的解析器設計?正則表達式應該在解析器中用於解釋器還是編譯器?
例如,對於JSON的EBNF語法可以被表示爲:
object ::= '{' '}' | '{' members '}';
members ::= pair | pair ',' members;
pair ::= string ':' value;
array ::= '[' ']' | '[' elements ']';
elements ::= value | value ',' elements;
value ::= string | number | object | array | 'true' | 'false' | 'null';
所以語法將需要使用某種類型的詞法分析器(如遞歸下降語法分析器或特設解析器)進行匹配,但對於某些值(如數字)的語法可以被表示爲像數此正則表達式模式的正則語言:
-?\d+(\.\d+)?([eE][+-]?\d+)?
鑑於這一例子中,假設正在產生遞歸下降JSON解析器..如果這個數字是匹配的d通過遞歸下降技術還是應該通過RegEx匹配號碼,因爲它可以使用RegEx輕鬆匹配?
如果你有嵌套,我會用一個體面的解析器。各個組件可以使用正則表達式來概括字符(特別是類)。 – sln