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 關注
- 822 瀏覽
添加回答
舉報