锁定 0.0.1

锁定 0.0.1

测试已测试
语言语言 Obj-CObjective C
许可证 自定义
发布最后发布2014 年 12 月

未指派 维护。



锁定 0.0.1

  • 作者
  • Daniel Parnell 和 Matt Diephouse

锁定

锁定是一个从解析表达式语法(PEGs)生成 Objective-C 递归下降解析器的工具。

此代码及其生成的代码均在公共领域。

概述

pegged [--version] [--help] [--output-dir directory] file

描述

锁定从 PEG 语法生成 Objective-C 解析器。它生成的解析器是可重入的,线程安全的,并且不泄漏内存:它们适用于包含在其他程序中。

锁定读取文件中指定的语法,并将创建一个相同名称的类。然后将在输出目录中创建一个 .h 和一个 .m 文件,输出目录可以从命令行指定,默认为包含 PEG 语法的目录。解析器类遵循一个简单的接口

@protocol ParserDataSource;
typedef NSObject<ParserDataSource> ParserDataSource;
@interface Parser : NSObject
{
}
@property (retain) ParserDataSource *dataSource;
- (BOOL) parse;
- (BOOL) parseString:(NSString *)string;
@end

@protocol ParserDataSource
- (NSString *) nextString;
@end

要解析的数据可以通过数据源(响应单个选择器 -nextString)或通过 -parseString: 选择器提供。

选项

--version    Print version information and exit
--help        Print help and exit
--output-dir    Write generated files to the specified directory

示例

以下是一个简单的示例:一个基本的计算器。

@property (retain) Calculator *calculator;

Equation <- Sum EndOfFile

Sum <- Product ( PLUS  Product { [self.calculator add]; }
               / MINUS Product { [self.calculator subtract]; }
               )*

Product <- Terminal ( MUL Terminal { [self.calculator multiply]; }
                    / DIV Terminal { [self.calculator divide];   }
                    )*

Terminal <- OPEN Primary CLOSE
          / Number { [self.calculator pushNumber:text]; }

Number <- < [0-9+] > _

OPEN      <- '(' _
CLOSE     <- ')' _

MUL       <- '*' _
DIV       <- '/' _
PLUS      <- '+' _
MINUS     <- '-' _
_         <- ' '*
EndOfFile <- !.

语法首先指定一个选项和任何所需的 Objective-C 属性。这些属性添加到生成的解析器类中,包括所需的成员变量、@class 声明和 #import 语句。

接下来是一系列的规则,其中一些具有动作。这些动作在解析完成后执行。在计算器的例子中,数字被添加到堆栈中,并通过添加为属性的 Calculator 对象进行基本操作。