Parse branches
This commit is contained in:
@@ -1,13 +1,20 @@
|
|||||||
module LDText
|
module LDText
|
||||||
|
|
||||||
module Ast =
|
module Ast =
|
||||||
type Rung = Step list
|
type Rung =
|
||||||
|
| Rung of Step list
|
||||||
|
|
||||||
and Instr = { Op: string; Args: Operand list }
|
and Instr = { Op: string; Args: Operand list }
|
||||||
|
|
||||||
|
and BranchArm =
|
||||||
|
| BranchArm of Step list
|
||||||
|
|
||||||
|
and Branch =
|
||||||
|
| Branch of BranchArm list
|
||||||
|
|
||||||
and Step =
|
and Step =
|
||||||
| StepInstr of Instr
|
| StepInstr of Instr
|
||||||
| StepBranch of Step list
|
| StepBranch of Branch
|
||||||
|
|
||||||
and Operand =
|
and Operand =
|
||||||
| OperandHole
|
| OperandHole
|
||||||
|
159
ldtext/Parser.fs
159
ldtext/Parser.fs
@@ -38,6 +38,8 @@ type nonTerminalId =
|
|||||||
| NONTERM__startrung
|
| NONTERM__startrung
|
||||||
| NONTERM_rung
|
| NONTERM_rung
|
||||||
| NONTERM_steps
|
| NONTERM_steps
|
||||||
|
| NONTERM_branch
|
||||||
|
| NONTERM_branch_arms
|
||||||
| NONTERM_instr
|
| NONTERM_instr
|
||||||
| NONTERM_operands
|
| NONTERM_operands
|
||||||
| NONTERM_operand
|
| NONTERM_operand
|
||||||
@@ -78,12 +80,17 @@ let prodIdxToNonTerminal (prodIdx:int) =
|
|||||||
| 1 -> NONTERM_rung
|
| 1 -> NONTERM_rung
|
||||||
| 2 -> NONTERM_steps
|
| 2 -> NONTERM_steps
|
||||||
| 3 -> NONTERM_steps
|
| 3 -> NONTERM_steps
|
||||||
| 4 -> NONTERM_instr
|
| 4 -> NONTERM_steps
|
||||||
| 5 -> NONTERM_operands
|
| 5 -> NONTERM_branch
|
||||||
| 6 -> NONTERM_operands
|
| 6 -> NONTERM_branch_arms
|
||||||
| 7 -> NONTERM_operands
|
| 7 -> NONTERM_branch_arms
|
||||||
| 8 -> NONTERM_operand
|
| 8 -> NONTERM_branch_arms
|
||||||
| 9 -> NONTERM_operand
|
| 9 -> NONTERM_instr
|
||||||
|
| 10 -> NONTERM_operands
|
||||||
|
| 11 -> NONTERM_operands
|
||||||
|
| 12 -> NONTERM_operands
|
||||||
|
| 13 -> NONTERM_operand
|
||||||
|
| 14 -> NONTERM_operand
|
||||||
| _ -> failwith "prodIdxToNonTerminal: bad production index"
|
| _ -> failwith "prodIdxToNonTerminal: bad production index"
|
||||||
|
|
||||||
let _fsyacc_endOfInputTag = 11
|
let _fsyacc_endOfInputTag = 11
|
||||||
@@ -114,38 +121,38 @@ let _fsyacc_dataOfToken (t:token) =
|
|||||||
| RIGHT_PAREN -> (null : System.Object)
|
| RIGHT_PAREN -> (null : System.Object)
|
||||||
| LEFT_PAREN -> (null : System.Object)
|
| LEFT_PAREN -> (null : System.Object)
|
||||||
| IDENTIFIER _fsyacc_x -> Microsoft.FSharp.Core.Operators.box _fsyacc_x
|
| IDENTIFIER _fsyacc_x -> Microsoft.FSharp.Core.Operators.box _fsyacc_x
|
||||||
let _fsyacc_gotos = [| 0us;65535us;1us;65535us;0us;1us;2us;65535us;0us;2us;5us;6us;2us;65535us;0us;5us;5us;5us;2us;65535us;8us;9us;12us;13us;2us;65535us;8us;11us;12us;11us;|]
|
let _fsyacc_gotos = [| 0us;65535us;1us;65535us;0us;1us;5us;65535us;0us;2us;5us;6us;7us;8us;9us;12us;13us;12us;5us;65535us;0us;7us;5us;7us;7us;7us;9us;7us;13us;7us;2us;65535us;9us;10us;13us;14us;5us;65535us;0us;5us;5us;5us;7us;5us;9us;5us;13us;5us;2us;65535us;16us;17us;20us;21us;2us;65535us;16us;19us;20us;19us;|]
|
||||||
let _fsyacc_sparseGotoTableRowOffsets = [|0us;1us;3us;6us;9us;12us;|]
|
let _fsyacc_sparseGotoTableRowOffsets = [|0us;1us;3us;9us;15us;18us;24us;27us;|]
|
||||||
let _fsyacc_stateToProdIdxsTableElements = [| 1us;0us;1us;0us;1us;1us;1us;1us;1us;1us;1us;3us;1us;3us;1us;4us;1us;4us;1us;4us;1us;4us;2us;6us;7us;1us;6us;1us;6us;1us;8us;1us;9us;|]
|
let _fsyacc_stateToProdIdxsTableElements = [| 1us;0us;1us;0us;1us;1us;1us;1us;1us;1us;1us;3us;1us;3us;1us;4us;1us;4us;1us;5us;1us;5us;1us;5us;2us;7us;8us;1us;7us;1us;7us;1us;9us;1us;9us;1us;9us;1us;9us;2us;11us;12us;1us;11us;1us;11us;1us;13us;1us;14us;|]
|
||||||
let _fsyacc_stateToProdIdxsTableRowOffsets = [|0us;2us;4us;6us;8us;10us;12us;14us;16us;18us;20us;22us;25us;27us;29us;31us;|]
|
let _fsyacc_stateToProdIdxsTableRowOffsets = [|0us;2us;4us;6us;8us;10us;12us;14us;16us;18us;20us;22us;24us;27us;29us;31us;33us;35us;37us;39us;42us;44us;46us;48us;|]
|
||||||
let _fsyacc_action_rows = 16
|
let _fsyacc_action_rows = 24
|
||||||
let _fsyacc_actionTableElements = [|1us;16386us;8us;7us;0us;49152us;1us;32768us;2us;3us;1us;32768us;0us;4us;0us;16385us;1us;16386us;8us;7us;0us;16387us;1us;32768us;7us;8us;2us;16389us;1us;15us;8us;14us;1us;32768us;6us;10us;0us;16388us;1us;16391us;3us;12us;2us;16389us;1us;15us;8us;14us;0us;16390us;0us;16392us;0us;16393us;|]
|
let _fsyacc_actionTableElements = [|2us;16386us;5us;9us;8us;15us;0us;49152us;1us;32768us;2us;3us;1us;32768us;0us;4us;0us;16385us;2us;16386us;5us;9us;8us;15us;0us;16387us;2us;16386us;5us;9us;8us;15us;0us;16388us;2us;16386us;5us;9us;8us;15us;1us;32768us;4us;11us;0us;16389us;1us;16392us;3us;13us;2us;16386us;5us;9us;8us;15us;0us;16391us;1us;32768us;7us;16us;2us;16394us;1us;23us;8us;22us;1us;32768us;6us;18us;0us;16393us;1us;16396us;3us;20us;2us;16394us;1us;23us;8us;22us;0us;16395us;0us;16397us;0us;16398us;|]
|
||||||
let _fsyacc_actionTableRowOffsets = [|0us;2us;3us;5us;7us;8us;10us;11us;13us;16us;18us;19us;21us;24us;25us;26us;|]
|
let _fsyacc_actionTableRowOffsets = [|0us;3us;4us;6us;8us;9us;12us;13us;16us;17us;20us;22us;23us;25us;28us;29us;31us;34us;36us;37us;39us;42us;43us;44us;|]
|
||||||
let _fsyacc_reductionSymbolCounts = [|1us;3us;0us;2us;4us;0us;3us;1us;1us;1us;|]
|
let _fsyacc_reductionSymbolCounts = [|1us;3us;0us;2us;2us;3us;0us;3us;1us;4us;0us;3us;1us;1us;1us;|]
|
||||||
let _fsyacc_productionToNonTerminalTable = [|0us;1us;2us;2us;3us;4us;4us;4us;5us;5us;|]
|
let _fsyacc_productionToNonTerminalTable = [|0us;1us;2us;2us;2us;3us;4us;4us;4us;5us;6us;6us;6us;7us;7us;|]
|
||||||
let _fsyacc_immediateActions = [|65535us;49152us;65535us;65535us;16385us;65535us;16387us;65535us;65535us;65535us;16388us;65535us;65535us;16390us;16392us;16393us;|]
|
let _fsyacc_immediateActions = [|65535us;49152us;65535us;65535us;16385us;65535us;16387us;65535us;16388us;65535us;65535us;16389us;65535us;65535us;16391us;65535us;65535us;65535us;16393us;65535us;65535us;16395us;16397us;16398us;|]
|
||||||
let _fsyacc_reductions = lazy [|
|
let _fsyacc_reductions = lazy [|
|
||||||
# 128 "Parser.fs"
|
# 135 "Parser.fs"
|
||||||
(fun (parseState : FSharp.Text.Parsing.IParseState) ->
|
(fun (parseState : FSharp.Text.Parsing.IParseState) ->
|
||||||
let _1 = parseState.GetInput(1) :?> Instr list in
|
let _1 = parseState.GetInput(1) :?> Rung in
|
||||||
Microsoft.FSharp.Core.Operators.box
|
Microsoft.FSharp.Core.Operators.box
|
||||||
(
|
(
|
||||||
(
|
(
|
||||||
raise (FSharp.Text.Parsing.Accept(Microsoft.FSharp.Core.Operators.box _1))
|
raise (FSharp.Text.Parsing.Accept(Microsoft.FSharp.Core.Operators.box _1))
|
||||||
)
|
)
|
||||||
: 'gentype__startrung));
|
: 'gentype__startrung));
|
||||||
# 137 "Parser.fs"
|
# 144 "Parser.fs"
|
||||||
(fun (parseState : FSharp.Text.Parsing.IParseState) ->
|
(fun (parseState : FSharp.Text.Parsing.IParseState) ->
|
||||||
let _1 = parseState.GetInput(1) :?> 'gentype_steps in
|
let _1 = parseState.GetInput(1) :?> 'gentype_steps in
|
||||||
Microsoft.FSharp.Core.Operators.box
|
Microsoft.FSharp.Core.Operators.box
|
||||||
(
|
(
|
||||||
(
|
(
|
||||||
# 26 "Parser.fsy"
|
# 26 "Parser.fsy"
|
||||||
_1
|
Rung _1
|
||||||
)
|
)
|
||||||
# 26 "Parser.fsy"
|
# 26 "Parser.fsy"
|
||||||
: Instr list));
|
: Rung));
|
||||||
# 148 "Parser.fs"
|
# 155 "Parser.fs"
|
||||||
(fun (parseState : FSharp.Text.Parsing.IParseState) ->
|
(fun (parseState : FSharp.Text.Parsing.IParseState) ->
|
||||||
Microsoft.FSharp.Core.Operators.box
|
Microsoft.FSharp.Core.Operators.box
|
||||||
(
|
(
|
||||||
@@ -155,7 +162,7 @@ let _fsyacc_reductions = lazy [|
|
|||||||
)
|
)
|
||||||
# 29 "Parser.fsy"
|
# 29 "Parser.fsy"
|
||||||
: 'gentype_steps));
|
: 'gentype_steps));
|
||||||
# 158 "Parser.fs"
|
# 165 "Parser.fs"
|
||||||
(fun (parseState : FSharp.Text.Parsing.IParseState) ->
|
(fun (parseState : FSharp.Text.Parsing.IParseState) ->
|
||||||
let _1 = parseState.GetInput(1) :?> 'gentype_instr in
|
let _1 = parseState.GetInput(1) :?> 'gentype_instr in
|
||||||
let _2 = parseState.GetInput(2) :?> 'gentype_steps in
|
let _2 = parseState.GetInput(2) :?> 'gentype_steps in
|
||||||
@@ -163,78 +170,134 @@ let _fsyacc_reductions = lazy [|
|
|||||||
(
|
(
|
||||||
(
|
(
|
||||||
# 30 "Parser.fsy"
|
# 30 "Parser.fsy"
|
||||||
_1 :: _2
|
StepInstr _1 :: _2
|
||||||
)
|
)
|
||||||
# 30 "Parser.fsy"
|
# 30 "Parser.fsy"
|
||||||
: 'gentype_steps));
|
: 'gentype_steps));
|
||||||
# 170 "Parser.fs"
|
# 177 "Parser.fs"
|
||||||
(fun (parseState : FSharp.Text.Parsing.IParseState) ->
|
(fun (parseState : FSharp.Text.Parsing.IParseState) ->
|
||||||
let _1 = parseState.GetInput(1) :?> string in
|
let _1 = parseState.GetInput(1) :?> 'gentype_branch in
|
||||||
let _3 = parseState.GetInput(3) :?> 'gentype_operands in
|
let _2 = parseState.GetInput(2) :?> 'gentype_steps in
|
||||||
Microsoft.FSharp.Core.Operators.box
|
Microsoft.FSharp.Core.Operators.box
|
||||||
(
|
(
|
||||||
(
|
(
|
||||||
# 33 "Parser.fsy"
|
# 31 "Parser.fsy"
|
||||||
{ Op = _1; Args = _3 }
|
StepBranch _1 :: _2
|
||||||
)
|
)
|
||||||
# 33 "Parser.fsy"
|
# 31 "Parser.fsy"
|
||||||
: 'gentype_instr));
|
: 'gentype_steps));
|
||||||
# 182 "Parser.fs"
|
# 189 "Parser.fs"
|
||||||
|
(fun (parseState : FSharp.Text.Parsing.IParseState) ->
|
||||||
|
let _2 = parseState.GetInput(2) :?> 'gentype_branch_arms in
|
||||||
|
Microsoft.FSharp.Core.Operators.box
|
||||||
|
(
|
||||||
|
(
|
||||||
|
# 34 "Parser.fsy"
|
||||||
|
Branch _2
|
||||||
|
)
|
||||||
|
# 34 "Parser.fsy"
|
||||||
|
: 'gentype_branch));
|
||||||
|
# 200 "Parser.fs"
|
||||||
(fun (parseState : FSharp.Text.Parsing.IParseState) ->
|
(fun (parseState : FSharp.Text.Parsing.IParseState) ->
|
||||||
Microsoft.FSharp.Core.Operators.box
|
Microsoft.FSharp.Core.Operators.box
|
||||||
(
|
(
|
||||||
(
|
(
|
||||||
# 36 "Parser.fsy"
|
# 37 "Parser.fsy"
|
||||||
[]
|
[]
|
||||||
)
|
)
|
||||||
# 36 "Parser.fsy"
|
# 37 "Parser.fsy"
|
||||||
|
: 'gentype_branch_arms));
|
||||||
|
# 210 "Parser.fs"
|
||||||
|
(fun (parseState : FSharp.Text.Parsing.IParseState) ->
|
||||||
|
let _1 = parseState.GetInput(1) :?> 'gentype_steps in
|
||||||
|
let _3 = parseState.GetInput(3) :?> 'gentype_branch_arms in
|
||||||
|
Microsoft.FSharp.Core.Operators.box
|
||||||
|
(
|
||||||
|
(
|
||||||
|
# 38 "Parser.fsy"
|
||||||
|
BranchArm _1 :: _3
|
||||||
|
)
|
||||||
|
# 38 "Parser.fsy"
|
||||||
|
: 'gentype_branch_arms));
|
||||||
|
# 222 "Parser.fs"
|
||||||
|
(fun (parseState : FSharp.Text.Parsing.IParseState) ->
|
||||||
|
let _1 = parseState.GetInput(1) :?> 'gentype_steps in
|
||||||
|
Microsoft.FSharp.Core.Operators.box
|
||||||
|
(
|
||||||
|
(
|
||||||
|
# 39 "Parser.fsy"
|
||||||
|
[ BranchArm _1 ]
|
||||||
|
)
|
||||||
|
# 39 "Parser.fsy"
|
||||||
|
: 'gentype_branch_arms));
|
||||||
|
# 233 "Parser.fs"
|
||||||
|
(fun (parseState : FSharp.Text.Parsing.IParseState) ->
|
||||||
|
let _1 = parseState.GetInput(1) :?> string in
|
||||||
|
let _3 = parseState.GetInput(3) :?> 'gentype_operands in
|
||||||
|
Microsoft.FSharp.Core.Operators.box
|
||||||
|
(
|
||||||
|
(
|
||||||
|
# 42 "Parser.fsy"
|
||||||
|
{ Op = _1; Args = _3 }
|
||||||
|
)
|
||||||
|
# 42 "Parser.fsy"
|
||||||
|
: 'gentype_instr));
|
||||||
|
# 245 "Parser.fs"
|
||||||
|
(fun (parseState : FSharp.Text.Parsing.IParseState) ->
|
||||||
|
Microsoft.FSharp.Core.Operators.box
|
||||||
|
(
|
||||||
|
(
|
||||||
|
# 45 "Parser.fsy"
|
||||||
|
[]
|
||||||
|
)
|
||||||
|
# 45 "Parser.fsy"
|
||||||
: 'gentype_operands));
|
: 'gentype_operands));
|
||||||
# 192 "Parser.fs"
|
# 255 "Parser.fs"
|
||||||
(fun (parseState : FSharp.Text.Parsing.IParseState) ->
|
(fun (parseState : FSharp.Text.Parsing.IParseState) ->
|
||||||
let _1 = parseState.GetInput(1) :?> 'gentype_operand in
|
let _1 = parseState.GetInput(1) :?> 'gentype_operand in
|
||||||
let _3 = parseState.GetInput(3) :?> 'gentype_operands in
|
let _3 = parseState.GetInput(3) :?> 'gentype_operands in
|
||||||
Microsoft.FSharp.Core.Operators.box
|
Microsoft.FSharp.Core.Operators.box
|
||||||
(
|
(
|
||||||
(
|
(
|
||||||
# 37 "Parser.fsy"
|
# 46 "Parser.fsy"
|
||||||
_1 :: _3
|
_1 :: _3
|
||||||
)
|
)
|
||||||
# 37 "Parser.fsy"
|
# 46 "Parser.fsy"
|
||||||
: 'gentype_operands));
|
: 'gentype_operands));
|
||||||
# 204 "Parser.fs"
|
# 267 "Parser.fs"
|
||||||
(fun (parseState : FSharp.Text.Parsing.IParseState) ->
|
(fun (parseState : FSharp.Text.Parsing.IParseState) ->
|
||||||
let _1 = parseState.GetInput(1) :?> 'gentype_operand in
|
let _1 = parseState.GetInput(1) :?> 'gentype_operand in
|
||||||
Microsoft.FSharp.Core.Operators.box
|
Microsoft.FSharp.Core.Operators.box
|
||||||
(
|
(
|
||||||
(
|
(
|
||||||
# 38 "Parser.fsy"
|
# 47 "Parser.fsy"
|
||||||
[ _1 ]
|
[ _1 ]
|
||||||
)
|
)
|
||||||
# 38 "Parser.fsy"
|
# 47 "Parser.fsy"
|
||||||
: 'gentype_operands));
|
: 'gentype_operands));
|
||||||
# 215 "Parser.fs"
|
# 278 "Parser.fs"
|
||||||
(fun (parseState : FSharp.Text.Parsing.IParseState) ->
|
(fun (parseState : FSharp.Text.Parsing.IParseState) ->
|
||||||
let _1 = parseState.GetInput(1) :?> string in
|
let _1 = parseState.GetInput(1) :?> string in
|
||||||
Microsoft.FSharp.Core.Operators.box
|
Microsoft.FSharp.Core.Operators.box
|
||||||
(
|
(
|
||||||
(
|
(
|
||||||
# 41 "Parser.fsy"
|
# 50 "Parser.fsy"
|
||||||
OperandTag _1
|
OperandTag _1
|
||||||
)
|
)
|
||||||
# 41 "Parser.fsy"
|
# 50 "Parser.fsy"
|
||||||
: 'gentype_operand));
|
: 'gentype_operand));
|
||||||
# 226 "Parser.fs"
|
# 289 "Parser.fs"
|
||||||
(fun (parseState : FSharp.Text.Parsing.IParseState) ->
|
(fun (parseState : FSharp.Text.Parsing.IParseState) ->
|
||||||
Microsoft.FSharp.Core.Operators.box
|
Microsoft.FSharp.Core.Operators.box
|
||||||
(
|
(
|
||||||
(
|
(
|
||||||
# 42 "Parser.fsy"
|
# 51 "Parser.fsy"
|
||||||
OperandHole
|
OperandHole
|
||||||
)
|
)
|
||||||
# 42 "Parser.fsy"
|
# 51 "Parser.fsy"
|
||||||
: 'gentype_operand));
|
: 'gentype_operand));
|
||||||
|]
|
|]
|
||||||
# 237 "Parser.fs"
|
# 300 "Parser.fs"
|
||||||
let tables : FSharp.Text.Parsing.Tables<_> =
|
let tables : FSharp.Text.Parsing.Tables<_> =
|
||||||
{ reductions = _fsyacc_reductions.Value;
|
{ reductions = _fsyacc_reductions.Value;
|
||||||
endOfInputTag = _fsyacc_endOfInputTag;
|
endOfInputTag = _fsyacc_endOfInputTag;
|
||||||
@@ -256,5 +319,5 @@ let tables : FSharp.Text.Parsing.Tables<_> =
|
|||||||
numTerminals = 12;
|
numTerminals = 12;
|
||||||
productionToNonTerminalTable = _fsyacc_productionToNonTerminalTable }
|
productionToNonTerminalTable = _fsyacc_productionToNonTerminalTable }
|
||||||
let engine lexer lexbuf startState = tables.Interpret(lexer, lexbuf, startState)
|
let engine lexer lexbuf startState = tables.Interpret(lexer, lexbuf, startState)
|
||||||
let rung lexer lexbuf : Instr list =
|
let rung lexer lexbuf : Rung =
|
||||||
engine lexer lexbuf 0 :?> _
|
engine lexer lexbuf 0 :?> _
|
||||||
|
@@ -26,6 +26,8 @@ type nonTerminalId =
|
|||||||
| NONTERM__startrung
|
| NONTERM__startrung
|
||||||
| NONTERM_rung
|
| NONTERM_rung
|
||||||
| NONTERM_steps
|
| NONTERM_steps
|
||||||
|
| NONTERM_branch
|
||||||
|
| NONTERM_branch_arms
|
||||||
| NONTERM_instr
|
| NONTERM_instr
|
||||||
| NONTERM_operands
|
| NONTERM_operands
|
||||||
| NONTERM_operand
|
| NONTERM_operand
|
||||||
@@ -40,4 +42,4 @@ val prodIdxToNonTerminal: int -> nonTerminalId
|
|||||||
|
|
||||||
/// This function gets the name of a token as a string
|
/// This function gets the name of a token as a string
|
||||||
val token_to_string: token -> string
|
val token_to_string: token -> string
|
||||||
val rung : (FSharp.Text.Lexing.LexBuffer<'cty> -> token) -> FSharp.Text.Lexing.LexBuffer<'cty> -> (Instr list)
|
val rung : (FSharp.Text.Lexing.LexBuffer<'cty> -> token) -> FSharp.Text.Lexing.LexBuffer<'cty> -> (Rung)
|
||||||
|
@@ -18,16 +18,25 @@ open FSharp.Text.Lexing
|
|||||||
%start rung
|
%start rung
|
||||||
|
|
||||||
// return type of parser, marked by start token
|
// return type of parser, marked by start token
|
||||||
%type <Instr list> rung
|
%type <Rung> rung
|
||||||
|
|
||||||
%%
|
%%
|
||||||
|
|
||||||
rung:
|
rung:
|
||||||
| steps SEMICOLON EOF { $1 }
|
| steps SEMICOLON EOF { Rung $1 }
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
| { [] }
|
| { [] }
|
||||||
| instr steps { $1 :: $2 }
|
| instr steps { StepInstr $1 :: $2 }
|
||||||
|
| branch steps { StepBranch $1 :: $2 }
|
||||||
|
|
||||||
|
branch:
|
||||||
|
| LEFT_BRACKET branch_arms RIGHT_BRACKET { Branch $2 }
|
||||||
|
|
||||||
|
branch_arms:
|
||||||
|
| { [] }
|
||||||
|
| steps COMMA branch_arms { BranchArm $1 :: $3}
|
||||||
|
| steps { [ BranchArm $1 ] }
|
||||||
|
|
||||||
instr:
|
instr:
|
||||||
| IDENTIFIER LEFT_PAREN operands RIGHT_PAREN { { Op = $1; Args = $3 } }
|
| IDENTIFIER LEFT_PAREN operands RIGHT_PAREN { { Op = $1; Args = $3 } }
|
||||||
|
@@ -22,5 +22,6 @@ parse "abc();"
|
|||||||
parse "abc(def);"
|
parse "abc(def);"
|
||||||
parse "abc(def,ghi);"
|
parse "abc(def,ghi);"
|
||||||
parse "abc(def,ghi) a(b) ;"
|
parse "abc(def,ghi) a(b) ;"
|
||||||
|
parse "a() [ b() c(), d(), , e() [ f() ] g() ] h();"
|
||||||
|
|
||||||
if failed then exit 1 else exit 0
|
if failed then exit 1 else exit 0
|
Reference in New Issue
Block a user