[英]How to export state variable from PEG.js parser
I'm starting to use excellent PEG.JS JavaScript parser generator 我开始使用出色的PEG.JS JavaScript解析器生成器
to implement Qt's qmake
project file parser (*.pro). 实现Qt的qmake
项目文件解析器(* .pro)。
It looks bash script, with variable assignments and function calls. 它看起来像bash脚本,具有变量分配和函数调用。
First of all, i need to parse all assignments to some kind of Dictionary
, and use it in external code. 首先,我需要解析所有对某种Dictionary
赋值,并在外部代码中使用它。
I can't undestand how to access internal parser state from the external function. 我无法理解如何从外部函数访问内部解析器状态。 Ie: i need to parse my pro
-file, and save state into client code-accessible variable, eg JavaScript Dictionary. 即:我需要解析我的pro
文件,并将状态保存到客户端代码可访问的变量中,例如JavaScript字典。 But i can't achieve this! 但是我做不到!
Grammar (right now understood only assignment statement like TEMPLATE = app
): 语法(目前仅理解诸如TEMPLATE = app
赋值语句):
{
var SystemVariablesDict = {};
}
Start = Statement*
Statement = Whitespace GenericAssignmentStatement Whitespace
GenericAssignmentStatement = TemplateAssignmentStatement
// TEMPLATE = app|lib|subdirs|aux|vcapp|vclib
SystemTemplateVariableName = "TEMPLATE"
SystemTemplateVariableValue = "app" / "lib" / "subdirs" / "aux" / "vcapp" / "vclib"
TemplateAssignmentStatement = lvalue:SystemTemplateVariableName
AssignmentOperator rvalue:SystemTemplateVariableValue
{
// [REF 1] !!! Assignment to the global state variable !!!
SystemVariablesDict[lvalue] = rvalue;
return undefined;
}
AssignmentOperator = Whitespace "=" Whitespace
Word = w:Character+ { return w.join(""); }
Character = c:[a-zA-Z0-9]
Whitespace = [ \t\r\n]*
(The grammar above was successfully compiled in the qmake-project-parser.js
) The parser usage code ( frontend.js
file): (上面的语法已在qmake-project-parser.js
成功编译)解析器用法代码( frontend.js
文件):
var pegjs = require("./qmake-project-parser.js");
var parserOutput = pegjs.parse("TEMPLATE = app");
console.log("PEG.js parser output:");
console.log(parserOutput);
console.log("System variables dict:");
console.log(pegjs.SystemVariablesDict);
And the output: 并输出:
C:\Projects\qmake-project-parser>node frontend.js
PEG.js parser output:
[ [ [], undefined, [] ] ]
System variables dict:
**undefined**
The question is: why undefined was outputed, however the REF 1 rule was successfully applied? 问题是:为什么输出undefined ,但是成功应用了REF 1规则?
What am i doing wrong? 我究竟做错了什么?
Thanks! 谢谢!
PS I'm new to JavaScript, so be patient to my silly mistakes please :) PS我是JavaScript的新手,请耐心等待我的愚蠢错误:)
From what I remember from using PEG.js, the start rule is generally used to return whatever you want to return as parser output: 从使用PEG.js所记得的内容中,开始规则通常用于返回要作为解析器输出返回的任何内容:
Start = Statement* { return SystemVariablesDict }
Which should end up in parserOutput
. 哪个应该以parserOutput
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.