2016-03-12 53 views
1

我正在使用lex和yacc編譯一個mC編譯器,並且在我想創建的yacc文件中以及我的一個表達式中的可選標記。YACC:可選令牌

Expr: Expr ASSIGN|COMMA Expr        ; 
| Expr AND|OR Expr         ; 
| Expr EQ|NE|LT|GT|LE|GE Expr      ; 
| Expr PLUS|MINUS|AST|DIV|MOD Expr     ; 
| AMP|AST|PLUS|MINUS|NOT Expr      ; 
| Expr LSQ Expr RSQ          ; 
| ID LPAR '['Expr '{'COMMA Expr'}'']' RPAR      ; 
| ID | INTLIT | CHRLIT | STRLIT | LPAR Expr RPAR  ; 

在 '{' '}' 意味着它的和可選的特徵。在這個例子中,COMMA Expr應該是可選的。我如何說'它'和可選功能之間的'{}'?

回答

0

如果我理解你的問題,你應該使用兩個規則:

| ID LPAR Expr RPAR 
| ID LPAR Expr COMMA Expr RPAR 

'{'是文字字符。以這種方式編寫單字符標記是正常的(無論是在野牛還是在flex中,因爲它們需要匹配。)並且您不能使用|來表示備用令牌,只有替代產品。所以你需要擴展各種產品:

| Expr '+' Expr 
| Expr '-' Expr 
| ID '(' Expr ')' 
| ID '(' Expr ',' Expr ')'