ANTLR中的解析器规则和词法分析器规则之间的实际区别?

我了解理论上将解析器规则和词法分析器规则分开的理论,但是ANTLR中的这两个语句之间的实际区别是什么:


my_rule: ... ;


MY_RULE: ... ;

它们会导致不同的AST树吗?不同的表现?潜在的歧义?


明月笑刀无情
浏览 691回答 2
2回答

慕无忌1623718

仁写道:...这两个语句在ANTLR中有什么实际区别...MY_RULE将用于标记您的输入源。它代表了您语言的基本组成部分。my_rule 从解析器中调用,它由零个或多个其他解析器规则或词法分析器生成的标记组成。就是这样。仁写道:它们会导致不同的AST树吗?不同的表现?...解析器使用词法分析器生成的令牌来构建AST,因此这些问题对我而言毫无意义。词法分析器仅向解析器“馈送”一维令牌流。

万千封印

这篇文章可能会有所帮助:词法分析器负责第一步,唯一的工作是从文本创建“令牌流”。它不负责理解您语言的语义,仅对理解您语言的语法感兴趣。例如,语法是一个规则,即标识符必须仅使用字符,数字和下划线-只要它不以数字开头。词法分析器的职责是了解此规则。在这种情况下,词法分析器将接受字符“ asd_123”的序列,但拒绝字符“ 12dsadsa”(假设没有另一条规则适用于此文本)。当看到有效的文本示例时,它可能会向令牌流中发送令牌,例如IDENTIFIER(asd_123)。请注意,我说的是“标识符”,是诸如变量名,函数名,名称空间名称等之类的通用术语。解析器将是能够理解该标识符出现的上下文的事物,以便其进一步指定该令牌作为某物的名称。(旁注:令牌只是赋予令牌流元素的唯一名称。lexeme是匹配令牌的文本。我将lexeme写在令牌旁边的括号中。例如NUMBER(123)。在这种情况下,这是一个数字标记,其词素为'123'。但是,对于某些标记(例如运算符),我省略了词素,因为它是多余的。例如,我将为分号标记而不是SEMICOLON( ;))。
打开App,查看更多内容
随时随地看视频慕课网APP