使用ANTLR 4.7解析Swift:需要解析字符串文字中的片段

时间:2018-05-09 18:45:40

标签: java swift parsing antlr

我正在使用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?

谢谢,

罗伊

1 个答案:

答案 0 :(得分:0)

我看到错误说extraneous input ' '是否有处理空格的规则? 如果没有,你可以尝试在语法中添加以下内容来处理空格,并检查它是否有任何区别。

SPACE:    [ \t\r\n]+    -> channel(HIDDEN);