将 EBNF 转换为 C# 供编译器

问题描述 投票:0回答:1

我正在尝试学习将 EBNF 转换为 C# 代码。

样品:

int <ident> = <expr>

我理解它的说法“这种数据类型(int)的变量(ident)接受(=)一个整数(expr),但我不明白的是如何转换它对此:

来自Ast班

public class Int : Stmt
{
    public string Ident;
    public Expr Expr;
}

来自解析器类

    #region INTEGER VARIABLE
    else if (this.tokens[this.index].Equals("int"))
    {
        this.index++;
        Int Integer = new Int();

        if (this.index < this.tokens.Count &&
            this.tokens[this.index] is string)
        {
            Integer.Ident = (string)this.tokens[this.index];
        }
        else
        {
            throw new System.Exception("expected variable name after 'int'");
        }

        this.index++;

        if (this.index == this.tokens.Count ||
            this.tokens[this.index] != Scanner.EqualSign)
        {
            throw new System.Exception("expected = after 'int ident'");
        }

        this.index++;

        Integer.Expr = this.ParseExpr();
        result = Integer;
    }
    #endregion

来自 CodeGen 类

    #region INTEGER
    else if (stmt is Int)
    {
        // declare a local
        Int integer = (Int)stmt;
        this.symbolTable[integer.Ident] = this.il.DeclareLocal(this.TypeOfExpr(integer.Expr));

        // set the initial value
        Assign assign = new Assign();
        assign.Ident = integer.Ident;
        assign.Expr = integer.Expr;
        this.GenStmt(assign);
    }
    #endregion

有人可以指出我正确的方向,如何正确理解如何转换它吗?

c# compiler-construction ebnf
1个回答
0
投票

为什么不使用像AntLR这样的编译器编译器呢?它会自动完成,而且速度更快:)

© www.soinside.com 2019 - 2024. All rights reserved.