diff options
| author | bringert <unknown> | 2004-09-29 08:27:28 +0000 |
|---|---|---|
| committer | bringert <unknown> | 2004-09-29 08:27:28 +0000 |
| commit | df2c63c5596db36f0c1899cced6b7ee2e946741e (patch) | |
| tree | eece388341c371e9b1c552663493e2fb05dacd6f /src/GF/CFGM/ParCFG.y | |
| parent | 01f872bf5db46863565c44c7f40b337217d35e8e (diff) | |
Updated to latest CFG specification from gfc2java
Diffstat (limited to 'src/GF/CFGM/ParCFG.y')
| -rw-r--r-- | src/GF/CFGM/ParCFG.y | 49 |
1 files changed, 42 insertions, 7 deletions
diff --git a/src/GF/CFGM/ParCFG.y b/src/GF/CFGM/ParCFG.y index 09e3a4b5a..0570d7c38 100644 --- a/src/GF/CFGM/ParCFG.y +++ b/src/GF/CFGM/ParCFG.y @@ -23,6 +23,9 @@ import ErrM '{' { PT _ (TS "{") } '}' { PT _ (TS "}") } '!' { PT _ (TS "!") } + '=' { PT _ (TS "=") } + '(' { PT _ (TS "(") } + ')' { PT _ (TS ")") } 'end' { PT _ (TS "end") } 'grammar' { PT _ (TS "grammar") } 'startcat' { PT _ (TS "startcat") } @@ -62,7 +65,7 @@ ListFlag : {- empty -} { [] } Rule :: { Rule } -Rule : Ident ':' Name Profile '.' Category '->' ListSymbol { Rule $1 $3 $4 $6 (reverse $8) } +Rule : Ident ':' Name Profile '.' Category '->' ListSymbol { Rule $1 $3 $4 $6 $8 } ListRule :: { [Rule] } @@ -96,8 +99,9 @@ Symbol : Category { CatS $1 } ListSymbol :: { [Symbol] } -ListSymbol : {- empty -} { [] } - | ListSymbol Symbol { flip (:) $1 $2 } +ListSymbol : '.' { [] } + | Symbol { (:[]) $1 } + | Symbol ListSymbol { (:) $1 $2 } Name :: { Name } @@ -110,20 +114,51 @@ ListIdentParam : {- empty -} { [] } Category :: { Category } -Category : IdentParam '.' Ident ListParam { Category $1 $3 (reverse $4) } +Category : IdentParam '.' Ident ListProj { Category $1 $3 (reverse $4) } IdentParam :: { IdentParam } -IdentParam : Ident '{' ListParam '}' { IdentParam $1 (reverse $3) } +IdentParam : Ident '{' ListField '}' { IdentParam $1 (reverse $3) } + + +Field :: { Field } +Field : '.' KeyValue { Field $2 } + + +ListField :: { [Field] } +ListField : {- empty -} { [] } + | ListField Field ';' { flip (:) $1 $2 } + + +Proj :: { Proj } +Proj : '!' Param { Proj $2 } + + +ListProj :: { [Proj] } +ListProj : {- empty -} { [] } + | ListProj Proj { flip (:) $1 $2 } + + +KeyValue :: { KeyValue } +KeyValue : Ident '=' Param { KeyValue $1 $3 } + + +ListKeyValue :: { [KeyValue] } +ListKeyValue : {- empty -} { [] } + | KeyValue { (:[]) $1 } + | KeyValue ';' ListKeyValue { (:) $1 $3 } Param :: { Param } -Param : '!' Ident { Param $2 } +Param : Ident { ParamSimple $1 } + | Ident '(' ListParam ')' { ParamPatt $1 $3 } + | '{' ListKeyValue '}' { ParamRec $2 } ListParam :: { [Param] } ListParam : {- empty -} { [] } - | ListParam Param { flip (:) $1 $2 } + | Param { (:[]) $1 } + | Param ',' ListParam { (:) $1 $3 } |
