相关疑难解决方法(0)

在C#中使用ANTLR ASTs的教程?

是否有人知道在C#中使用ANTLR生成的AST的教程?我能找到的最接近的是这个,但它并不是非常有用.

我的目标是根据我正在使用的特定于域的语言遍历我正在生成的树,并使用树来输出生成的C#代码.

基于Java的教程也很有帮助 - 任何提供如何遍历ANTLR AST的明确示例的东西.

c# java parsing antlr

21
推荐指数
2
解决办法
1万
查看次数

C#,ANTLR,ECMAScript语法问题

我正在尝试使用C#解析JavaScript(ECMASCript).

我找到了关于如何创建新项目的以下说明:http: //www.antlr.org/wiki/pages/viewpage.action?pageId = 557075

所以我下载了ANTLRWorks,ANTLR v3,解压缩的ANTLR,创建了一个VS2010项目(.NET4),添加了引用,检查并生成了语法.

然后我收到了很多编译错误:

找不到类型或命名空间名称'AstParserRuleReturnScope'(您是否缺少using指令或程序集引用?)

找不到类型或命名空间名称'GrammarRule'(您是否缺少using指令或程序集引用?)

Stackoverlowed为他们并得到一个解决方案:集成到VS2008时antlr c#错误

所以我下载了新的运行时,覆盖了旧的运行时并重新编译了项目并得到了

当前上下文中不存在名称"HIDDEN"d:\ Workspace.1\ScriptParser\ScriptParser\TestLexer.cs

好的,我已经按照以下对话中的建议将HIDDEN更改为Hidden:[antlr-interest] Csharp3目标的可行性如何?(更具体的问题)

现在我正在尝试解析输入.我找到了几个例子,并编写了以下代码:

using Antlr.Runtime;
namespace ScriptParser
{
    class Program
    {
        static void Main(string[] args)
        {
            var stream = new ANTLRStringStream("1+2");
            var lexer = new TestLexer(stream);
            var tokenStream = new CommonTokenStream(lexer);
            var parser = new TestParser(tokenStream);
            // what exactly should be here???
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我的目标是使用ANTLR解析JavaScript文件,但它似乎并不像我想象的那么容易......

更新:

正如 为什么antlr3 c#解析器方法是私有的?我通过添加在expr规则之前修改的"public"修改了Test.g语法:

public expr : mexpr (PLUS^ mexpr)* SEMI! 
; 
Run Code Online (Sandbox Code Playgroud)

然后重新生成代码,将HIDDEN替换为Hidden(再次)并修改代码如下:

var …
Run Code Online (Sandbox Code Playgroud)

antlr3

9
推荐指数
1
解决办法
2289
查看次数

如何在正则表达式中指定匹配模式的优先级?

我正在编写一个函数解析引擎,它使用正则表达式来分隔各个术语(定义为常量或变量,后跟(可选)由运算符).它工作得很好,除非我在其他分组术语中对术语进行分组.这是我正在使用的代码:

//This matches an opening delimiter
Regex openers = new Regex("[\\[\\{\\(]");

//This matches a closing delimiter
Regex closers = new Regex("[\\]\\}\\)]");

//This matches the name of a variable (\w+) or a constant numeric value (\d+(\.\d+)?)
Regex VariableOrConstant = new Regex("((\\d+(\\.\\d+)?)|\\w+)" + FunctionTerm.opRegex + "?");

//This matches the binary operators +, *, -, or /
Regex ops = new Regex("[\\*\\+\\-/]");

//This compound Regex finds a single variable or constant term (including a proceeding operator,
//if any) OR a group containing multiple …
Run Code Online (Sandbox Code Playgroud)

.net c# regex parsing

8
推荐指数
1
解决办法
5933
查看次数

公式和数学表达式解析器算法

我必须编写一个能够解析公式的程序.它应该像下面这个例子一样工作:

输入:5x + 7 ^ sin(z)/ 2T + 44
输出:输入x,z,t的值
输入:
2,1,2输出:答案是:某事


它应该支持(+,*, - ,^,%,SIN,COS)
我读过这个页面关于Shunting-yard算法

而且我也知道如何将Infix表达式转换为后缀或前缀.
这是我的算法:

1 - 给出表达.
2 - 如果括号是平衡,则转到步骤3否则显示错误转到步骤1
3 - 查找除(SIN,COS)之外的所有变量
4 - 从输入
5中提供变量 - 替换变量
6 - 前缀表达式并计算它
7 - 显示导致输出和关闭程序

是对的吗 ?我想在C#中实现它.
请建议我任何注释可能对我有用.

c# algorithm math

4
推荐指数
1
解决办法
4669
查看次数

标签 统计

c# ×3

parsing ×2

.net ×1

algorithm ×1

antlr ×1

antlr3 ×1

java ×1

math ×1

regex ×1