1
我正在編寫一個非常基本的編譯器/解析器作爲學習項目。ANTLR如何獲得表達式令牌
grammar C;
file: expr;
expr: '(' expr ')' # parens
| '-'<assoc=right> expr # Negate
| expr op=('*'|'/') expr # MulDiv
| expr op=('+'|'-') expr # AddSub
| INT # int
;
INT: '0' | [1-9][0-9]*;
WS: [ \t\n\r] -> skip;
這裏是
public override void ExitNegate([NotNull] CParser.NegateContext context)
{
var children = context.children;
if (children[1].ChildCount == 1)
{
assembler.Mov32RI(allocator.AllocateRegister().ToString().ToLower(), -int.Parse(children[1].GetText()));
}
else
{
assembler.NegateR(allocator.Top().ToString());
}
base.ExitNegate(context);
}
我使用
children[1].ChildCount == 1
,基本的意思是「如果孩子是一個int」,因爲這是在否定操作的事件的例子只有語法規則我可能意味着在這種情況下(我認爲)。有沒有辦法在這種情況下獲得表達式令牌,所以我實際上在尋找INT?在更復雜的語法中,我希望我的邏輯更加明確。
編輯:我沒有在語法上尋找改進,但我如何在偵聽器中使用上下文參數來確定表達式部分是否是整數(理想情況下,我認爲檢查INT令牌)。