Pergunta

Estou tendo alguns problemas complicados com o Irony que não entendo...

A primeira análise que faço no tempo de execução do meu aplicativo é bem-sucedida.

string src = "" // this is the file to parse
Grammar g = new CSharpGrammar();
LanguageData language = new LanguageData(g);
Parser parser = new Parser(language);
ParseTree parseTree = parser.Parse(src);
ParseRoot = parseTree.Root;

Então segui uma dica para mover a variável LanguageData para o contexto global.Ainda está tudo bem.Mas agora eu queria chamar o analisador Irony dentro de funções personalizadas, analisando vários arquivos com a gramática c# v3.5 fornecida pelo Irony (consultas LINQ não são importantes para mim, então isso parece suficiente).Mesma abordagem:

Parser parser = new Parser(language);
ParseTree parseTree = parser.Parse(file);
ParseRoot = parseTree.Root;

Mas agora a raiz de análise é e permanece "nula".E não tenho absolutamente nenhuma ideia do porquê.Também verifiquei os erros do analisador há pouco, reconheci um erro que não consigo compreender.

"Syntax error, expected: statement, member declaration, namespace"

Mas meu arquivo está assim:

using System;
using Microsoft.SharePoint.WebControls;

namespace WebParts.Layouts.Ordering
{
    public partial class ConfirmDelete : LayoutsPageBase
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            lblMsg.Text = "Are you sure you want to delete the entry?";

            if (!IsPostBack)
            {
                BtnYes.Attributes.Add("onclick", "OnYes(); return false;");
                BtnNo.Attributes.Add("onclick", "OnNo(); return false;");
            }
        }
    }
}

Espero que você possa ver o que há de errado com meu código ...Estou ficando desesperado com essa coisa...

Foi útil?

Solução

Você deve fornecer um nome de arquivo como segundo argumento de parser.Parse:

static void Main(string[] args)
{
    Grammar g = new CSharpGrammar();
    LanguageData language = new LanguageData(g);
    Parser parser = new Parser(language);
    ParseTree parseTree = parser.Parse("", "class1.cs");

    var r = parseTree.Root;
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top