首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >代码着色器错误

代码着色器错误
EN

Stack Overflow用户
提问于 2013-09-05 06:01:45
回答 1查看 216关注 0票数 0

我试图编写一个语法来解析如下

代码语言:javascript
复制
b.a := 7;

我的语法如下所示

代码语言:javascript
复制
public class STGrammar : InterpretedLanguageGrammar
{
    public STGrammar() : base(caseSensitive: false)
    {
        LanguageFlags = LanguageFlags.CreateAst;

        # region Terminals
        Terminal n = new NumberLiteral("number");
        Terminal v = new IdentifierTerminal("variable");
        KeyTerm assignment = ToTerm(":=");
        KeyTerm left_paren = ToTerm("(");
        KeyTerm right_paren = ToTerm(")");
        KeyTerm terminate = ToTerm(";");
        KeyTerm left_sq = ToTerm("[");
        KeyTerm right_sq = ToTerm("]");
        KeyTerm dot = ToTerm(".");
        #endregion Terminals

        #region Nonterminals
        NonTerminal actionBlock = new NonTerminal("actionBlock", typeof(ActionBlock));
        NonTerminal assignmentExpr = new NonTerminal("assignmentExpr", typeof(AssignmentStNode));
        NonTerminal arrayOrStruct = new NonTerminal("arrayOrStruct", typeof(ArrayNode));
        NonTerminal arrayOrStructRHS = new NonTerminal("arrayOrStructRHS", typeof(AstNode));
        NonTerminal arrayOrStructRHSs = new NonTerminal("arrayOrStructRHSs");
        NonTerminal comparatorExp = new NonTerminal("comparatorExpression", typeof(ExpressionNode));
        #endregion Nonterminals

        #region BNFRules
        actionBlock.Rule =
            assignmentExpr + terminate
            | arrayOrStruct + terminate
            ;
        assignmentExpr.Rule =
            v + assignment + v
            | v + assignment + n
            | arrayOrStruct + assignment + v
            | v + assignment + arrayOrStruct
            | arrayOrStruct + assignment + arrayOrStruct
            | arrayOrStruct + assignment + n
            ;
        arrayOrStruct.Rule =
            v + arrayOrStructRHSs
            ;
        arrayOrStructRHS.Rule = 
            "." + v 
            | "[" + v + "]"
            ;
        arrayOrStructRHSs.Rule =
            MakePlusRule(arrayOrStructRHSs, arrayOrStructRHS)
            ;

        this.Root = actionBlock;

        #endregion BNFRules

        MarkPunctuation(",", ";", "[", "]", ")", "(", "..", ".");
        RegisterBracePair("(", ")");
    }
}

当我试图解析它时,它可以正常工作。

代码语言:javascript
复制
b := 7;

出现的错误是Fatal Error in code colorizer. Colorizing had been disabled.,即使我注释掉了

代码语言:javascript
复制
LanguageFlags = LanguageFlags.CreateAst;

错误仍然存在。详细的错误是

代码语言:javascript
复制
System.NullReferenceException was unhandled by user code
  Message=Object reference not set to an instance of an object.
  Source=Irony
  StackTrace:
       at Irony.Ast.AstBuilder.BuildAst(ParseTreeNode parseNode) in C:\Sreeja\downloads\Irony_2013_03_10\Irony\Ast\AstBuilder.cs:line 97
       at Irony.Ast.AstBuilder.BuildAst(ParseTreeNode parseNode) in C:\Sreeja\downloads\Irony_2013_03_10\Irony\Ast\AstBuilder.cs:line 86
       at Irony.Ast.AstBuilder.BuildAst(ParseTreeNode parseNode) in C:\Sreeja\downloads\Irony_2013_03_10\Irony\Ast\AstBuilder.cs:line 86
       at Irony.Ast.AstBuilder.BuildAst(ParseTreeNode parseNode) in C:\Sreeja\downloads\Irony_2013_03_10\Irony\Ast\AstBuilder.cs:line 86
       at Irony.Ast.AstBuilder.BuildAst(ParseTree parseTree) in C:\Sreeja\downloads\Irony_2013_03_10\Irony\Ast\AstBuilder.cs:line 38
       at Irony.Interpreter.InterpretedLanguageGrammar.BuildAst(LanguageData language, ParseTree parseTree) in C:\Sreeja\downloads\Irony_2013_03_10\Irony.Interpreter\InterpretedLanguageGrammar.cs:line 60
       at Irony.Parsing.Parser.Parse(String sourceText, String fileName) in C:\Sreeja\downloads\Irony_2013_03_10\Irony\Parsing\Parser\Parser.cs:line 88
       at Irony.GrammarExplorer.fmGrammarExplorer.ParseSample() in C:\Sreeja\downloads\Irony_2013_03_10\Irony.GrammarExplorer\fmGrammarExplorer.cs:line 348
       at Irony.GrammarExplorer.fmGrammarExplorer.btnParse_Click(Object sender, EventArgs e) in C:\Sreeja\downloads\Irony_2013_03_10\Irony.GrammarExplorer\fmGrammarExplorer.cs:line 507
       at System.Windows.Forms.Control.OnClick(EventArgs e)
       at System.Windows.Forms.Button.OnClick(EventArgs e)
       at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
       at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
       at System.Windows.Forms.Control.WndProc(Message& m)
       at System.Windows.Forms.ButtonBase.WndProc(Message& m)
       at System.Windows.Forms.Button.WndProc(Message& m)
       at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
       at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
       at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
  InnerException: 

有人能帮我解决这个错误吗?我正在使用Irony_2013_03_10版本。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-19 05:39:54

对于所有非终端,除临时终端外,都应添加Ast节点类型。在每个Ast节点类中,重写Init()和DoEvalute()函数。详细信息可以在这一讨论中找到

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18628815

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档