0

次の構文で Irony.Net を使用しようとしています。

!!test 
!test1 

where !!test- グローバル変数および!test1- ローカル変数

私はこのコードを書きました:

var local_identifier = new IdentifierTerminal("localidentifier","","!"); 
var global_identifier = new IdentifierTerminal("globalidentifier","","!!"); 
var param_identifier = new NonTerminal("paramidentifier"); 
param_identifier.Rule = local_identifier | global_identifier; 

そして、シフト削減エラーが発生します

私が間違っていることは何ですか?

codeplex ( https://irony.codeplex.com/discussions/546013 ) の助けを借りて、問題を解決します。結果コードは次のとおりです。

public static IdentifierTerminal CreateLocalIdentifier(string name)
    {
        var id = new IdentifierTerminal(name, IdOptions.None);
        id.AddPrefix("!", IdOptions.IsNotKeyword);
        id.StartCharCategories.AddRange(new[]
        {
            UnicodeCategory.UppercaseLetter, //Ul
            UnicodeCategory.LowercaseLetter, //Ll
            UnicodeCategory.TitlecaseLetter, //Lt
            UnicodeCategory.ModifierLetter, //Lm
            UnicodeCategory.OtherLetter, //Lo
            UnicodeCategory.LetterNumber //Nl
        });

        id.CharCategories.AddRange(new[]
        {
            UnicodeCategory.DecimalDigitNumber, //Nd
            UnicodeCategory.ConnectorPunctuation, //Pc
            UnicodeCategory.SpacingCombiningMark, //Mc
            UnicodeCategory.NonSpacingMark, //Mn
            UnicodeCategory.Format //Cf
        });
        id.CharsToRemoveCategories.Add(UnicodeCategory.Format);
        return id;
    }

    public static IdentifierTerminal CreateGlobalIdentifier(string name)
    {
        var id = new IdentifierTerminal(name, IdOptions.None);
        id.AddPrefix("!!", IdOptions.IsNotKeyword);
        id.StartCharCategories.AddRange(new[]
        {
            UnicodeCategory.UppercaseLetter, //Ul
            UnicodeCategory.LowercaseLetter, //Ll
            UnicodeCategory.TitlecaseLetter, //Lt
            UnicodeCategory.ModifierLetter, //Lm
            UnicodeCategory.OtherLetter, //Lo
            UnicodeCategory.LetterNumber //Nl
        });
        id.CharCategories.AddRange(new[]
        {
            UnicodeCategory.DecimalDigitNumber, //Nd
            UnicodeCategory.ConnectorPunctuation, //Pc
            UnicodeCategory.SpacingCombiningMark, //Mc
            UnicodeCategory.NonSpacingMark, //Mn
            UnicodeCategory.Format //Cf
        });
        id.CharsToRemoveCategories.Add(UnicodeCategory.Format);
        return id;
    }
4

0 に答える 0