2012-04-03 29 views
2

我不是在写文法超经验的,但让我们说我有一个记录类型类似这样的: (例子)写ParseKit语法与不同数量的字段(按顺序)

record # 1 source ages params A = 1 and b = 2 fields are A, B, C with values 1, 2, 3; 
record # 2; 
record # 3 source ages; 
record # 4 params A = 1 and b = 2 fields are A, B, C with values 1, 2, 3; 
record # 5 source ages fields are A, B, C with values 1, 2, 3; 
record # 6 with values 1, 2, 3; 

基本上:

  1. 必须以“record#Number”开头并以分号结尾。
  2. 可能含有0或1捕获以下顺序:
  3. 源数据集
  4. 数据集的参数,从数据集中
  5. 领域从数据集

这里是我的语法,这不是working:

--- start grammar:

@start = record; 

record = 'record' '#' numeric rest* ';'; 
rest = 'source' alphanumeric paramsAndOrFieldsAndOrWithValues*; 
paramsAndOrFieldsAndOrWithValues = (paramsList)? (fieldsList)? (valuesList)?; 
paramsList = 'params' alpha expr numeric ('and' alpha expr numeric)*; 
fieldsList = 'fields' 'are' alpha (comma alpha)*; 
valuesList = 'with' 'values' numeric (comma numeric)*; 


alpha = Word; 
numeric = Number; 
alphanumeric = (alpha | numeric | '_' | '.'); 
comma = ','; 
expr = '='; 

---结尾语法

@“ParseKit开发者”,你能帮我吗?

谢谢:)

回答

1

ParseKit这里开发。

你的语法有点偏离。我编写了一个与您的示例输入相匹配的语法。我已经使用DebugApp目标执行此操作,并且可以确认它适用于您的示例。

@start = records; 
records = record+; 
record = prefix source? params? fields? values? suffix; 

prefix = 'record' '#' Number; 
suffix = ';'; 

// source 
source = 'source' Word; 

// params 
params = 'params' expr ('and' expr)*; 
expr = name '=' Number; 
name = Word; 

// fields 
fields = 'fields' 'are' name (',' name)*; 

// values 
values = 'with' 'values' val (',' val)*; 

val = Number; 
+0

record#1 source hello fields are A,B,C; 无法解析字段,任何想法,为什么?使用你的语法 – 2012-04-04 10:35:58

+0

嗯,这对我来说正常工作对我的语法。下面是我的Record回调的打印输出: '[DebugAppDelegate parser:didMatchRecord:] [record,#,1,source,hello,fields,are,A,,, B,,, C,;] record /#/ 1/source/hello/fields/are/A /,/ B /,/ C /; ^' – 2012-04-04 16:10:21

+0

奇怪的是,在“ParseKit Demo”中它没有显示'fields'分支/树...可能是一个bug PK Demo应用程序? 下面是截图:http://imgur.com/bjb10 – 2012-04-04 21:31:42