相关疑难解决方法(0)

寻找"标记器","解析器"和"词法分析器"的清晰定义以及它们如何相互关联和使用?

我正在寻找"tokenizer","parser"和"lexer"是什么以及它们如何相互关联的明确定义(例如,解析器是否使用了tokenizer,反之亦然)?我需要创建一个程序,将通过c/h源文件来提取数据声明和定义.

我一直在寻找示例,可以找到一些信息,但我真的很难掌握语法规则,解析树和抽象语法树等基础概念以及它们如何相互关联.最终这些概念需要存储在实际程序中,但1)它们看起来像什么,2)是否有共同的实现.

我一直在关注这些主题和程序,如Lex和Yacc维基百科,但从未经历过编译器类(EE专业),我发现很难完全理解正在发生的事情.

parsing tokenize lexer

134
推荐指数
3
解决办法
3万
查看次数

抽象语法树和具体语法树有什么区别?

我一直在阅读有关解释器/编译器如何工作的一些内容,而我感到困惑的一个领域是AST和CST之间的区别.我的理解是解析器生成一个CST,将它交给语义分析器,将其转换为AST.但是,我的理解是语义分析器只是确保遵循规则.我真的不明白为什么它会实际做出任何改变,使其变得抽象而不是具体.

有没有关于语义分析器的东西,或者AST和CST之间的差异有点人为?

parsing terminology abstract-syntax-tree semantic-analysis concrete-syntax-tree

74
推荐指数
6
解决办法
3万
查看次数

正则表达式捕获VBA评论

我正在尝试捕获VBA评论.到目前为止,我有以下内容

'[^";]+\Z
Run Code Online (Sandbox Code Playgroud)

它捕获任何以单引号开头但在字符串结尾之前不包含任何双引号的内容.即它不匹配双引号字符串中的单引号.

dim s as string        ' a string variable   -- works
s = "the cat's hat"    ' quote within string -- works
Run Code Online (Sandbox Code Playgroud)

但如果注释包含双引号字符串,则会失败

dim s as string ' string should be set to "ten"
Run Code Online (Sandbox Code Playgroud)

我怎样才能修复我的正则表达式呢?

regex vba

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

词法分析器的目的是什么?

我正在阅读这个问题的答案. 我似乎无法找到答案,为什么会有人需要一个词法分析器分开

这是程序在编译过程中经历的步骤之一吗?有人可以用简单的语言解释为什么我需要一个词法分析器,它会用于什么目的?

compiler-construction lexical-analysis

3
推荐指数
1
解决办法
1393
查看次数

ANTLR:规则令牌具有非LL(*)决策,因为递归规则调用可以从alts 1,2到达

grammar AdifyMapReducePredicate;

PREDICATE 
    :   PREDICATE_BRANCH
    |   EXPRESSION
    ;

PREDICATE_BRANCH
    :   '(' PREDICATE (('&&' PREDICATE)+ | ('||' PREDICATE)+) ')'
    ;

EXPRESSION 
    :   ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*
    ;
Run Code Online (Sandbox Code Playgroud)

试图在ANTLRWorks 1.4中解释这一点,并收到以下错误:

[12:18:21] error(211): <notsaved>:1:8: [fatal] rule Tokens has non-LL(*) decision due to recursive rule invocations reachable from alts 1,2.  Resolve by left-factoring or using syntactic predicates or using backtrack=true option.
[12:18:21] Interpreting...
Run Code Online (Sandbox Code Playgroud)

当我解释时,我试图解释一个预测,我的测试用例是(A || B)

我错过了什么?

antlr

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

删除java源代码中的注释

我想从 java 源代码文件中删除所有类型的注释语句。例子:

    String str1 = "SUM 10"      /*This is a Comments */ ;   
    String str2 = "SUM 10";     //This is a Comments"  
    String str3 = "http://google.com";   /*This is a Comments*/
    String str4 = "('file:///xghsghsh.html/')";  //Comments
    String str5 = "{\"temperature\": {\"type\"}}";  //comments
Run Code Online (Sandbox Code Playgroud)

预期输出:

    String str1 = "SUM 10"; 
    String str2 = "SUM 10";  
    String str3 = "http://google.com";
    String str4 = "('file:///xghsghsh.html/')";
    String str5 = "{\"temperature\": {\"type\"}}";
Run Code Online (Sandbox Code Playgroud)

我使用下面的正则表达式来实现:

    System.out.println(str1.replaceAll("[^:]//.*|/\\\\*((?!=*/)(?s:.))+\\\\*/", ""));
Run Code Online (Sandbox Code Playgroud)

这给了我 str4 和 str5 错误的结果。请帮我解决这个问题。

使用 Andreas 解决方案:

        final String regex …
Run Code Online (Sandbox Code Playgroud)

java regex

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