訪問通過語法規(guī)則傳遞的運算符值時出現(xiàn)編譯錯誤。例如,我有以下語法文件:grammar Expr;@parser::header {import ( "os")}@parser::members {func eval(left int, op antlr.Token, right int) int { if (op.GetText() == "*") { return left * right } else if (op.GetText() == "+") { return left + right } else if (op.GetText() == "-") { return left - right } else { return 0 }}}stat: e NEWLINE | NEWLINE ;e returns [int v] : a=e op=('+'|'-') b=e { $v = eval($a.v, $op, $b.v) fmt.Fprintf(os.Stdout, "got args=%d %d\n", $a.v, $b.v) } | INT { $v = $INT.int fmt.Fprintf(os.Stdout, "got number=%d\n", $v) } ; MUL : '*' ;DIV : '/' ;ADD : '+' ;SUB : '-' ;ID : [a-zA-Z]+ ; // match identifiersINT : [0-9]+ ; // match integersNEWLINE:'\r'? '\n' ; // return newlines to parser (is end-statement signal)WS : [ \t]+ -> skip ; // toss out whitespace這是測試代碼:package mainimport ( "os" "./parser" "github.com/antlr/antlr4/runtime/Go/antlr")func calc(inputfile string) { input, _ := antlr.NewFileStream(inputfile)// Setup the input lexer := parser.NewExprLexer(input)// Create the Lexer stream := antlr.NewCommonTokenStream(lexer, antlr.TokenDefaultChannel) p := parser.NewExprParser(stream)// Create the Parser p.Stat()}func main() { calc(os.Args[1])}這些是我運行的命令:java org.antlr.v4.Tool -Dlanguage=Go -o parser -no-listener Expr.g4go build expr_t.go以上2個程序正常工作。但是,如果我將 eval 函數(shù)的比較更改為以下內(nèi)容,則會出現(xiàn)編譯錯誤(類型不匹配):if (op.tokenType == ExprParserMUL) { return left * right如何獲取 op 的值以與 ExprParseMUL 進行比較?
1 回答

狐的傳說
TA貢獻1804條經(jīng)驗 獲得超3個贊
if (op.tokenType == ExprParserMUL) {
return left * right
如何獲取 op 的值以與 ExprParseMUL 進行比較?
沒有tokenType場。使用GetTokenType().
參見:https ://github.com/antlr/antlr4/blob/master/runtime/Go/antlr/token.go
- 1 回答
- 0 關(guān)注
- 120 瀏覽
添加回答
舉報
0/150
提交
取消