我正在使用antlr 4.7解析器解析swift代码。 在g4中,Interpolated_string_literal标记的定义如下:
Interpolated_string_literal : '"' Interpolated_text_item* '"' ;
fragment
Interpolated_text_item
: '\\(' (Interpolated_string_literal | Interpolated_text_item)+ ')' // nested strings allowed
| Quoted_text_item
;
我的问题是我需要解析器知道插值文本项的组件。我明白,因为它被定义为片段,这不起作用。所以我假设如果我删除片段关键字,它就可以了。 但是,删除后我开始收到很多错误,例如:
第9行:6个无关的输入' '期待{' for',' in',' var',' typealias',' struct',&#39 ;课程',' enum',' protocol',' func',' get',' set' ,' willSet',' didSet',' mutating',' nonmutating',' indirect','前缀','运营商',' postfix',' infix',' precedence',' associativity', '离开','对','无','方便','动态',' final& #39;,' lazy',' optional',' override',' required',' unowned',& #39;弱','协议','类型',标识符,'。','<',& #39;>','!','?','&',' - ' ,' =',' |',' /',' +',' & #39;,'%',' ^','〜',Operator_head_other} 第11:5行没有可行的选择在输入' class' 第9:6行无关输入' '期待{' for',' in',' var',' typealias',' struct',&#39 ;课程',' enum',' protocol',' func',' get',' set' ,' willSet',' didSet',' mutating',' nonmutating',' indirect','前缀','运营商',' postfix',' infix',' precedence',' associativity', '离开','对','无','方便','动态',' final& #39;,' lazy',' optional',' override',' required',' unowned',& #39;弱','协议','类型',标识符,'。','<',& #39;>','!','?','&',' - ' ,' =',' |',' /',' +',' &# 39;,'%',' ^','〜',Operator_head_other}
我不明白为什么将这个从片段更改为令牌会导致所有这些错误。 任何线索?
这是第一个错误的代码:
import UIKit
import CoreData
import CoreLocation
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate, CLLocationManagerDelegate {
var window: UIWindow?
var locManager: CLLocationManager?
谢谢,
罗伊
答案 0 :(得分:0)
我看到错误说extraneous input ' '
是否有处理空格的规则?
如果没有,你可以尝试在语法中添加以下内容来处理空格,并检查它是否有任何区别。
SPACE: [ \t\r\n]+ -> channel(HIDDEN);