Compare commits

..

3 Commits

3 changed files with 61 additions and 23 deletions

View File

@ -191,7 +191,7 @@ class Propane
end
code = code.gsub(/\$(\d+)/) do |match|
index = $1.to_i
"statevalues[$-1-n_states+#{index}].pvalue.v_#{rule.ptypename}"
"statevalues[$-1-n_states+#{index}].pvalue.v_#{rule.components[index - 1].ptypename}"
end
else
code = code.gsub(/\$\$/) do |match|

View File

@ -2,22 +2,45 @@ class JSONValue
{
}
class JSONObject < JSONValue
class JSONObject : JSONValue
{
JSONValue[string] value;
this()
{
}
class JSONArray < JSONValue
this(JSONValue[string] value)
{
this.value = value;
}
}
class JSONArray : JSONValue
{
JSONValue[] value;
this()
{
}
class JSONNumber < JSONValue
this(JSONValue[] value)
{
this.value = value;
}
}
class JSONNumber : JSONValue
{
double value;
this(double value)
{
this.value = value;
}
}
class JSONString < JSONValue
class JSONString : JSONValue
{
string value;
@ -27,14 +50,14 @@ class JSONString < JSONValue
}
}
class JSONTrue < JSONValue
class JSONTrue : JSONValue
{
}
class JSONFalse < JSONValue
class JSONFalse : JSONValue
{
}
class JSONNull < JSONValue
class JSONNull : JSONValue
{
}

View File

@ -19,8 +19,8 @@ describe Propane do
end
end
def compile(test_file)
result = system(*%w[gdc -funittest -o spec/run/testparser spec/run/testparser.d], test_file)
def compile(*test_files)
result = system(*%w[gdc -funittest -o spec/run/testparser spec/run/testparser.d -Ispec], *test_files)
expect(result).to be_truthy
end
@ -341,9 +341,15 @@ EOF
import json_types;
string string_value;
>>
ptype JSONValue;
ptype array = JSONValue[];
ptype dict = JSONValue[string];
ptype string = string;
drop /\\s+/;
token lbrace /\\{/;
token rbrace /\\}/RuRfaw2CHgpvCWu;
token rbrace /\\}/;
token lbracket /\\[/;
token rbracket /\\]/;
token comma /,/;
@ -360,7 +366,8 @@ token number /-?(0|[1-9][0-9]*)(\\.[0-9]+)?([eE][-+]?[0-9]+)?/ <<
negative = true;
}
}
$$ = new JSONNumber();
double n = 1.0;
$$ = new JSONNumber(n);
>>
token true <<
$$ = new JSONTrue();
@ -375,8 +382,8 @@ token null <<
$mode(string);
string_value = "";
>>
string: token string /"/ <<
$$ = new JSONString(string_value);
string: token string (string) /"/ <<
$$ = string_value;
$mode(default);
>>
string: /\\\\"/ <<
@ -414,7 +421,7 @@ Start -> Value <<
$$ = $1;
>>
Value -> string <<
$$ = $1;
$$ = new JSONString($1);
>>
Value -> number <<
$$ = $1;
@ -440,7 +447,7 @@ Object -> lbrace rbrace <<
Object -> lbrace KeyValues rbrace <<
$$ = new JSONObject($2);
>>
KeyValues -> KeyValue <<
KeyValues (dict) -> KeyValue <<
$$ = $1;
>>
KeyValues -> KeyValues comma KeyValue <<
@ -450,15 +457,23 @@ KeyValues -> KeyValues comma KeyValue <<
}
$$ = $1;
>>
KeyValue -> string colon Value <<
$$ =
KeyValue (dict) -> string colon Value <<
$$ = [$1: $3];
>>
Array -> lbracket rbracket <<
$$ = new JSONArray();
>>
Array -> lbracket Values rbracket <<
$$ = new JSONArray($2);
>>
Values (array) -> Value <<
$$ = [$1];
>>
Values -> Values comma Value <<
$$ = $1 ~ [$3];
>>
Array -> lbracket rbracket;
Array -> lbracket Values rbracket;
Values -> Value;
Values -> Values comma Value;
EOF
build_parser
compile("spec/test_parsing_json.d")
compile("spec/test_parsing_json.d", "spec/json_types.d")
end
end