Parsing 在哪里可以阅读有关为ParseKit定义语法的详细文档?
我刚刚开始学习ParseKit,阅读“基本语法”,但这只是一个非常基本的介绍。现在我想开始定义自己的语法,我很快就不知所措了。我该怎么办 例如,我想以非常自定义的格式解析日志文件。将其分解为页眉、正文和页脚,这将是我的页眉第一行的BNF:Parsing 在哪里可以阅读有关为ParseKit定义语法的详细文档?,parsing,bnf,parsekit,Parsing,Bnf,Parsekit,我刚刚开始学习ParseKit,阅读“基本语法”,但这只是一个非常基本的介绍。现在我想开始定义自己的语法,我很快就不知所措了。我该怎么办 例如,我想以非常自定义的格式解析日志文件。将其分解为页眉、正文和页脚,这将是我的页眉第一行的BNF: <header-line-1> ::= <log-format> <log-id> "," <category> <EOL> <log-format> ::= "Type A Logfi
<header-line-1> ::= <log-format> <log-id> "," <category> <EOL>
<log-format> ::= "Type A Logfile" | "Logfile II" | "Some Other Format"
<log-id> ::= "#" <long-int>
<category> ::= <some unknown string>
我怀疑至少有一种方法可以定义一系列的字符
当然,parsekit作者引用的这本书可能会对我有所帮助,但如果有人能在我深入研究这个主题之前帮助我开始我自己的小例子,那就太好了。我只是在调查一个想法,只是概念的证明。这里的开发者
不幸的是,没有关于ParseKit语法的更多(好的)文档。目前最好的资源是:
.grammar
文件。这里有很多真实世界的示例语法。你可以通过例子学到很多东西对于您的特定示例,下面是我可能如何用ParseKit语法定义它的
@symbolState = '\n'; // Tokenizer Directive
// tells tokenizer to treat new line chars as
// individual Symbol tokens rather than whitespace
@start = headerLine*;
headerLine = logFormat logId comma category eol;
logFormat = ('Type' 'A' 'Logfile') | ('Logfile' 'II') | ('Some' 'Other' 'Format');
logId = hash Number;
category = Any+;
comma = ',';
hash = '#';
eol = '\n';
需要记住的一件重要事情是,ParseKit中的解析过程分为两个阶段:
PKTokenizer
完成,并通过标记器指令进行更改)因此,由语法创建的解析器处理已由标记器标记的标记。它对单个字符或由多个标记组成的长字符串都不起作用。嘿,托德,首先,你亲自回答了我的问题,非常好,谢谢你-我一直希望你能这么做;)是的,我昨晚花了一段时间玩了演示应用程序,看了一下示例,我自己的示例也开始工作了;几乎完全如您所引用,但使用
category=Word+
。事实上,我不知道(或忽略了)Any
关键字。再次感谢您的帮助,这证明我似乎走上了正确的道路:)
@symbolState = '\n'; // Tokenizer Directive
// tells tokenizer to treat new line chars as
// individual Symbol tokens rather than whitespace
@start = headerLine*;
headerLine = logFormat logId comma category eol;
logFormat = ('Type' 'A' 'Logfile') | ('Logfile' 'II') | ('Some' 'Other' 'Format');
logId = hash Number;
category = Any+;
comma = ',';
hash = '#';
eol = '\n';