﻿<Workspace
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns="clr-namespace:agree;assembly=agree-sys"
  xmlns:cfg="clr-namespace:agree.configuration;assembly=agree-sys"
  xmlns:tsdb="clr-namespace:agree.itsdb;assembly=tsdb-core"
  xmlns:semi="clr-namespace:agree.semi;assembly=agree-sys">

    <Workspace.DefaultDirectories>
        <x:String>grammars\erg</x:String>
    </Workspace.DefaultDirectories>

    <Grammar x:Name="ERG"
             Description="English Resource Grammar"
             Author="Flickinger (2000). in Flickinger, Oepen, Tsujii, Uszkoreit, eds."
             ItemCulture="en-US">
        <Grammar.AgreeConfig>
            <cfg:PetConfigLoader Filename="pet/english.set" />
        </Grammar.AgreeConfig>
        <Grammar.SemI>
            <semi:SemI PredicateArgs="{semi:PredicateArgsLoader etc/core.smi}">
                <semi:VpmLoader Filename="semi.vpm" />
            </semi:SemI>
        </Grammar.SemI>
        <Grammar.TestSentence>
            <StringItem>Kim runs very quickly.</StringItem>
            <!--<StringItem>The cat is sleeping.</StringItem>-->
            <!--<StringItem>We're going to invite you'll never guess who to the party.</StringItem>-->
            <!--<StringItem>We admire the National Aeronautics and Space Administration's Ames Research Center at Moffett Field, Calif.</StringItem>-->
        </Grammar.TestSentence>
    </Grammar>

    <PropertyRef Item="{PathRef {x:Reference ERG}, AgreeConfig}" Path="Parser.Chart.NonIdiomRoot" Value="root_non_idiom" />

    <PropertyRef Item="{PathRef {x:Reference ERG}, AgreeConfig}" Path="Generator.Chart.IgnoreRules">
        <ReadFileLines Filename="lkb/nogen-rules.set" />
    </PropertyRef>

    <!-- 
    'lkb/noparse-rules.set' lists two rules for exclusion, but neither is indicated:
       1. xp_brck-pr_c: should not be excluded since agree supports chart mapping;
       2. hdn_bnp-rbst_c: vacuous omission since it's already commented out in constructions.tdl
    <PropertyRef Item="{PathRef {x:Reference ERG}, AgreeConfig}" Path="Parser.Chart.IgnoreRules">
        <ReadFileLines Filename="lkb/noparse-rules.set" />
    </PropertyRef>
    -->

    <!--<GrammarTdlFilesLoader x:Name="tdl_files" GrammarTdlFile="english.tdl" />-->

    <TdlGroup x:Name="ERG_TdlGroup">

        <TdlFileReader Filename="fundamentals.tdl" />
        <TdlFileReader Filename="lextypes.tdl" />
        <TdlFileReader Filename="tmt.tdl" />
        <TdlFileReader Filename="lfr.tdl"             TdlType="LexicalFilteringRule" />
        <TdlFileReader Filename="syntax.tdl" />
        <TdlFileReader Filename="ctype.tdl" />
        <TdlFileReader Filename="lexrules.tdl"/>
        <TdlFileReader Filename="dts.tdl"/>
        <TdlFileReader Filename="delims.tdl"/>
        <TdlFileReader Filename="auxverbs.tdl" />
        <TdlFileReader Filename="letypes.tdl" />

        <TdlFileReader Filename="mtr.tdl" />

        <TdlFileReader Filename="lexicon.tdl"         TdlType="LexicalEntry" />
        <TdlFileReader Filename="agree/lexicon-aux.tdl" TdlType="LexicalEntry" />
        <TdlFileReader Filename="gle.tdl"             TdlType="GenericLexicalEntry" />
        <TdlFileReader Filename="constructions.tdl"   TdlType="SyntaxRule" />
        <!-- Rules with morphology are submitted as LexicalRules; detection of possible spelling-change is automatic -->
        <TdlFileReader Filename="inflr.tdl"           TdlType="LexicalRule" />
        <TdlFileReader Filename="lexrinst.tdl"        TdlType="LexicalRule" />
        <!-- Rules with morphology are submitted as LexicalRules; detection of possible spelling-change is automatic -->
        <TdlFileReader Filename="inflr-pnct.tdl"      TdlType="LexicalRule" />
        <TdlFileReader Filename="parse-nodes.tdl"     TdlType="NodeLabel" />
        <TdlFileReader Filename="roots.tdl"           TdlType="StartSymbol" />
        <TdlFileReader Filename="trigger.mtr"         TdlType="TriggerRule" />

    </TdlGroup >

    <TdlGroup x:Name="ERG_TmrGroup">
        <!--<TdlFileReader Filename="tmr/ner.tdl"         TdlType="TokenMappingRule" />-->
        <TdlFileReader Filename="tmr/gml.tdl"         TdlType="TokenMappingRule" />
        <TdlFileReader Filename="tmr/ptb.tdl"         TdlType="TokenMappingRule" />
        <TdlFileReader Filename="tmr/spelling.tdl"    TdlType="TokenMappingRule" />
        <TdlFileReader Filename="tmr/ne1.tdl"         TdlType="TokenMappingRule" />
        <TdlFileReader Filename="tmr/split.tdl"       TdlType="TokenMappingRule" />
        <TdlFileReader Filename="tmr/ne2.tdl"         TdlType="TokenMappingRule" />
        <TdlFileReader Filename="tmr/class.tdl"       TdlType="TokenMappingRule" />
        <TdlFileReader Filename="tmr/ne3.tdl"         TdlType="TokenMappingRule" />
        <TdlFileReader Filename="tmr/punctuation.tdl" TdlType="TokenMappingRule" />
        <TdlFileReader Filename="tmr/pos.tdl"         TdlType="TokenMappingRule" />
        <TdlFileReader Filename="tmr/finis.tdl"       TdlType="TokenMappingRule" />
    </TdlGroup>

    <TypeLattice x:Name="ERG_tl">
        <TypeDictionary Grammar="{x:Reference ERG}">
            <TdlTokenGrouper>
                <TdlAggregator>
                    <Where x:TypeArguments="Tdl" Functor="{TdlTypePred {x:Static TdlType.Type}}">
                        <x:Reference Name="ERG_TdlGroup" />
                    </Where>
                </TdlAggregator>
            </TdlTokenGrouper>
        </TypeDictionary>
    </TypeLattice>

    <!--<TypeLattice x:Name="ERG_tl">
        <TypeDictionary Grammar="{x:Reference ERG}" InputTdls="{PathRef {x:Reference tdl_files}, TdlTypeDefinitions}" />
    </TypeLattice>-->

    <TypeUtils x:Name="ERG_tu" TypeLattice="{x:Reference ERG_tl}" />

    <FeatMgr x:Name="ERG_ftm" TypeUtils="{x:Reference ERG_tu}" />

    <Isometrics x:Name="ERG_im" FeatMgr="{x:Reference ERG_ftm}" />

    <ChartDependencyPaths x:Name="ERG_cdm" Isometrics="{x:Reference ERG_im}" />

    <QuickCheckFull x:Name="ERG_qc"
                Isometrics="{x:Reference ERG_im}"
                Paths="{ReadFileLines agree/erg-qc-paths.txt}" />

    <EntryMgr x:Name="ERG_em">

        <EntryMgr.TfsUnifier>
            <TfsUnifier Isometrics="{x:Reference ERG_im}" />
        </EntryMgr.TfsUnifier>

        <EntryMgr.MrsManager>
            <MrsManager Isometrics="{x:Reference ERG_im}" />
        </EntryMgr.MrsManager>

        <EntryMgr.TokenGeometry>
            <TokenGeometry Isometrics="{x:Reference ERG_im}" >
                <TokenGeometry.TokenMergeRuleTdl>
                    <Tdl xml:space="preserve">
<![CDATA[
merge_tmr := token_mapping_rule &
[ +INPUT < [ +PRED #pred,
             +CLASS #class,
             +TRAIT #trait,
             +FROM #from,
             +ID [ LIST #front, LAST #middle ], 
             +TNT [ +TAGS #tags, +PRBS #prbs ] ],
           [ +PRED #pred,
             +TRAIT #trait,
             +TO #to,
             +ID [ LIST #middle, LAST #back ], 
             +TNT [ +TAGS #tags, +PRBS #prbs ] ] >,
  +OUTPUT < [ +PRED #pred,
              +FORM #form,
              +CARG #carg,
              +CLASS #class,
              +TRAIT #trait,
              +FROM #from, 
              +TO #to,
              +ID [ LIST #front, LAST #back ],
              +TNT [ +TAGS #tags, +PRBS #prbs ] ] >,
  +CONTEXT < string & #form, string & #carg > ].        
]]>
                    </Tdl>
                </TokenGeometry.TokenMergeRuleTdl>
            </TokenGeometry>
        </EntryMgr.TokenGeometry>

        <EntryMgr.SyntaxRuleTokenGroups>
            <TdlTokenGrouper>
                <TdlAggregator>
                    <Where x:TypeArguments="Tdl" Functor="{TdlTypePred {x:Static TdlType.SyntaxRule}}" >
                        <x:Reference Name="ERG_TdlGroup" />
                    </Where>
                </TdlAggregator>
            </TdlTokenGrouper>
        </EntryMgr.SyntaxRuleTokenGroups>

        <EntryMgr.LexicalRuleTokenGroups>
            <TdlTokenGrouper>
                <TdlAggregator>
                    <Where x:TypeArguments="Tdl" Functor="{TdlTypePred {x:Static TdlType.LexicalRule}}">
                        <x:Reference Name="ERG_TdlGroup" />
                    </Where>
                </TdlAggregator>
            </TdlTokenGrouper>
        </EntryMgr.LexicalRuleTokenGroups>

        <EntryMgr.LexicalEntryTokenGroups>
            <TdlTokenGrouper>
                <TdlAggregator>
                    <Where x:TypeArguments="Tdl" Functor="{TdlTypePred {x:Static TdlType.LexicalEntry}}">
                        <x:Reference Name="ERG_TdlGroup" />
                    </Where>
                </TdlAggregator>
            </TdlTokenGrouper>
        </EntryMgr.LexicalEntryTokenGroups>

        <EntryMgr.GenericLexicalEntryTokenGroups>
            <TdlTokenGrouper>
                <TdlAggregator>
                    <Where x:TypeArguments="Tdl" Functor="{TdlTypePred {x:Static TdlType.GenericLexicalEntry}}">
                        <x:Reference Name="ERG_TdlGroup" />
                    </Where>
                </TdlAggregator>
            </TdlTokenGrouper>
        </EntryMgr.GenericLexicalEntryTokenGroups>

        <EntryMgr.NodeLabelTokenGroups>
            <TdlTokenGrouper>
                <TdlAggregator>
                    <Where x:TypeArguments="Tdl" Functor="{TdlTypePred {x:Static TdlType.NodeLabel}}">
                        <x:Reference Name="ERG_TdlGroup" />
                    </Where>
                </TdlAggregator>
            </TdlTokenGrouper>
        </EntryMgr.NodeLabelTokenGroups>

        <EntryMgr.TriggerRuleTokenGroups>
            <TdlTokenGrouper>
                <TdlAggregator>
                    <Where x:TypeArguments="Tdl" Functor="{TdlTypePred {x:Static TdlType.TriggerRule}}">
                        <x:Reference Name="ERG_TdlGroup" />
                    </Where>
                </TdlAggregator>
            </TdlTokenGrouper>
        </EntryMgr.TriggerRuleTokenGroups>

        <EntryMgr.StartSymbolTokenGroups>
            <TdlTokenGrouper>
                <TdlAggregator>
                    <Where x:TypeArguments="Tdl" Functor="{TdlTypePred {x:Static TdlType.StartSymbol}}">
                        <x:Reference Name="ERG_TdlGroup" />
                    </Where>
                </TdlAggregator>
            </TdlTokenGrouper>
        </EntryMgr.StartSymbolTokenGroups>

        <!-- Here, for the token mapping rules, we demonstrate an alternative to using the 'Where' markup 
            extension to select the tokens of a certain type (as for the entry types shown above). Instead, 
            we just grab all of the tokens from a dedicated TdlGroup we defined above ('ERG_TmrGroup') -->
        <EntryMgr.TokenMappingRuleTokenGroups>
            <TdlTokenGrouper>
                <TdlAggregator>
                    <x:Reference Name="ERG_TmrGroup" />
                </TdlAggregator>
            </TdlTokenGrouper>
        </EntryMgr.TokenMappingRuleTokenGroups>

        <EntryMgr.LexicalFilteringRuleTokenGroups>
            <TdlTokenGrouper>
                <TdlAggregator>
                    <Where x:TypeArguments="Tdl" Functor="{TdlTypePred {x:Static TdlType.LexicalFilteringRule}}">
                        <x:Reference Name="ERG_TdlGroup" />
                    </Where>
                </TdlAggregator>
            </TdlTokenGrouper>
        </EntryMgr.LexicalFilteringRuleTokenGroups>

    </EntryMgr>

    <NodeLabeler EntryMgr="{x:Reference ERG_em}" />

    <TriggerRuleMgr EntryMgr="{x:Reference ERG_em}" />

    <MorphologyRules>
        <MorphologyRules.Irregulars>
            <Irregulars EntryMgr="{x:Reference ERG_em}" Items="{IrregsReader irregs.tab}" />
        </MorphologyRules.Irregulars>
    </MorphologyRules>

    <Lexicon EntryMgr="{x:Reference ERG_em}" />

    <ReppRootModule x:Name="ERG_repp"
                AgreeConfig="{PathRef {x:Reference ERG}, AgreeConfig}"
                ReppSource="{ReadFile rpp/tokenizer.rpp}"
                Calls="xml;ascii;lgt;quotes" />

</Workspace>
