2013-06-11 37 views
0

我正在開發解析器,我想使用正則表達式來檢查Yacc語法。 但似乎它不工作了使用Regualar表達式檢查Yacc語法/ C#

 // Yacc-like grammar specifications 

//  Ligne ::= Expr '\n' {printf("%d \n" , $1)} 
//  Expr : Exp '+' Terme {$$ = $1 + $3; } | Terme ; 
//  Terme : Terme '*' Facteur {$$ = $1 * $3; } | Facteur ; 
//  Facteur : '(' Expr ')' {$$ = $2; } | Chiffre ; 


String YaccProdS = @"($$)+ [=] [$]+[0-9][^']([$]+[0-9])*"; 
Check = Regex.Match(Text,YaccProdS); 

回答

0

如果你只是希望得到什麼{}內部下面將讓你的是,它還將組$id和運營商。

String YaccProdS = @"(\$+)\s+=\s+(\$+\d+)(\s*([*+\/])\s*(\$+[0-9]+))?"; 

永遠要記住要逃脫你的特殊字符,如$

+0

它適用於第一個,但它不適用於這個{$$ = $ 2; } – ImnotaGeek

+0

我試過@「(\ $ \ $ +)=(\ $ + \ d +)\ s *([* + \ /])\ s *(\ $ + [0-9] +)*」; – ImnotaGeek

+0

由於Yacc規則的行爲可以是任意C語法,因此您必須將C標記。 – Kaz