2 回答
TA贡献1744条经验 获得超4个赞
仁写道:
...这两个语句在ANTLR中有什么实际区别...
MY_RULE将用于标记您的输入源。它代表了您语言的基本组成部分。
my_rule 从解析器中调用,它由零个或多个其他解析器规则或词法分析器生成的标记组成。
就是这样。
仁写道:
它们会导致不同的AST树吗?不同的表现?...
解析器使用词法分析器生成的令牌来构建AST,因此这些问题对我而言毫无意义。词法分析器仅向解析器“馈送”一维令牌流。
TA贡献1891条经验 获得超3个赞
这篇文章可能会有所帮助:
词法分析器负责第一步,唯一的工作是从文本创建“令牌流”。它不负责理解您语言的语义,仅对理解您语言的语法感兴趣。
例如,语法是一个规则,即标识符必须仅使用字符,数字和下划线-只要它不以数字开头。词法分析器的职责是了解此规则。在这种情况下,词法分析器将接受字符“ asd_123”的序列,但拒绝字符“ 12dsadsa”(假设没有另一条规则适用于此文本)。当看到有效的文本示例时,它可能会向令牌流中发送令牌,例如IDENTIFIER(asd_123)。
请注意,我说的是“标识符”,是诸如变量名,函数名,名称空间名称等之类的通用术语。解析器将是能够理解该标识符出现的上下文的事物,以便其进一步指定该令牌作为某物的名称。
(旁注:令牌只是赋予令牌流元素的唯一名称。lexeme是匹配令牌的文本。我将lexeme写在令牌旁边的括号中。例如NUMBER(123)。在这种情况下,这是一个数字标记,其词素为'123'。但是,对于某些标记(例如运算符),我省略了词素,因为它是多余的。例如,我将为分号标记而不是SEMICOLON( ;))。
- 2 回答
- 0 关注
- 787 浏览
添加回答
举报