summaryrefslogtreecommitdiff
path: root/src/GF/CFGM/ParCFG.y
diff options
context:
space:
mode:
authorbringert <unknown>2004-09-29 08:27:28 +0000
committerbringert <unknown>2004-09-29 08:27:28 +0000
commitdf2c63c5596db36f0c1899cced6b7ee2e946741e (patch)
treeeece388341c371e9b1c552663493e2fb05dacd6f /src/GF/CFGM/ParCFG.y
parent01f872bf5db46863565c44c7f40b337217d35e8e (diff)
Updated to latest CFG specification from gfc2java
Diffstat (limited to 'src/GF/CFGM/ParCFG.y')
-rw-r--r--src/GF/CFGM/ParCFG.y49
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 }