2017-12-21 40 views
6

में फ़ंक्शन तर्कों का वर्णन कैसे करें मैं अभी भी क्यूटी के क्यूमेक के संदिग्ध व्याकरण के साथ लड़ रहा हूं।पीईजी व्याकरण

अब मैं एक तरह से समारोह तर्क है कि कोष्ठक शामिल कर सकते हैं (उदाहरण के लिए regex) का वर्णन करने के नहीं मिल सकता है:

functionName(arg1, "arg2", ^(arg3)+$) 

मैं इस तरह समारोह कॉल वर्णन करने के लिए कोशिश की है:

FunctionCall = Identifier space* "(" space* FunctionArgumentList? space* ")" space* eol* 

FunctionArgumentList = FunctionArgumentString ((space* "," space* FunctionArgumentString)*/(blank* FunctionArgumentString)*) 
FunctionArgumentString = ReplaceFunctionCall/TestFunctionCall/EnquotedString/RegularFunctionArgumentString 
RegularFunctionArgumentString = RegularFunctionArgumentStringChar+ 
RegularFunctionArgumentStringChar = !(")"/blank/","/quote/doublequote) SourceCharacter 
SourceCharacter <- [\u0000-\uFFFC] 

मैं इस तरह के व्याकरण में उद्धरण/डबल कोट्स के बिना एम्बेडेड कोष्ठक के लिए समर्थन कैसे जोड़ूं? मैं फ़ंक्शंस तर्कों और फ़ंक्शन को बंद करने के अंदर ब्रांडेसिस को कैसे अलग करूं?

मान्य समारोह कॉल उदाहरण:

contains(CMAKE_INSTALL_LIBS_DIR, ^(/usr)?/lib(64)?.*) 
+0

'^ (/ usr)?/Lib (64)? *' 'क्या है? –

+0

बस एक जेएस की तरह नियमित अभिव्यक्ति – eraxillan

उत्तर

2

ठीक है, मैं एक बहुत hacky समाधान अपने आप को पाया:
सिर्फ एक अगले बयान के लिए आगे देखो।

FunctionCall = Identifier _* "(" _* FunctionArgumentList? _* ")" _* 
FunctionArgumentList = CommaSeparatedList/FunctionArgument 
CommaSeparatedList = FunctionArgument (COMMA_WS FunctionArgument?)+ 

FunctionArgument = FunctionArgumentImpl FunctionArgumentImpl* 
FunctionArgumentImpl = EnquotedString/FunctionArgumentString 
FunctionArgumentString = FunctionArgumentStringChar+ 
FunctionArgumentStringChar = !(COMMA/QUOTE/DOUBLEQUOTE/EndOfFunction) SourceCharacter 

EndOfFunction = ")" _* (
    eoi/eol 
    /"="/"+="/"*="/"-="/"~=" 
    /","/"."/"_" 
    /"("/")" 
    "{"/"}"/":"/"|" 
) 

COMMA_WS = _ "," _ 
COMMA = "," 
QUOTE = "'" 
DOUBLEQUOTE = '"' 
BACKSLASH = "\\" 
_ = [ \t] 

आशा इस किसी के लिए उपयोगी हो सकता है:
यहाँ एक सरल व्याकरण इस तरह का उपयोग कर टुकड़ा है।

संबंधित मुद्दे